hnakamur’s blog

ものすごい勢いで忘れる私のために未整理でもいいからとりあえずメモ

2011-06-11

Spring 3のHello WorldアプリにMyBatisを組み込み

組み込んだ結果はこちら。hnakamur/spring3-example1 at fa38bdcaeb7502d4f105746cc1d0bc6875a7d021 - GitHub

参考:This blog is all about me doing nothing serious :): Using MyBatis 3 with Spring 3 Using Mapper XML Files

上記のサイトではorg.mybatis.spring.SqlSessionTemplateのコンストラクタが引数なしでセッターでインジェクションしていますが、Spring - mybatis - An introduction to MyBatis integration with Spring - SQL Mapping Framework for Java - Google Project Hostingのバージョン1.0.1ではコンストラクタに引数が必要になっていたので変更してあります。

GitHubのソースに含まれない設定内容は以下の通りです。ここではDBはPostgreSQLを使用しています。

$TOMCAT_HOME/conf/server.xmlの<GlobalNamingResources>に以下のようにデータソース定義を追加します。
<Resource name="jdbc/postgresql" auth="Container"
              type="javax.sql.DataSource"
              driverClassName="org.postgresql.Driver"
              url="jdbc:postgresql://127.0.0.1:5432/springdb1"
              username="spring"
              password="spring"
              maxActive="20" maxIdle="10" maxWait="-1" />

$TOMCAT_HOME/lib/にPostgreSQLのJDBCドライバを入れます。ダウンロードはこちら。PostgreSQL JDBC Driver

[Window]/[Preferences]→[Tomcat]→[コンテキスト宣言モード]を「コンテキスト・ファイル」にしていると、コンテキストファイルに<ResourceLink>タグの記述が必要です。プロジェクトのプロパティの[Tomcat]の[その他の情報]に以下の内容を設定しておきます。
<ResourceLink name="jdbc/postgresql" global="jdbc/postgresql" type="javax.sql.DataSource"/>
なお、この設定は上記のGitHubのソースの.tomcatpluginに含まれています。

あと、SpringやMyBatisの設定をsrc/main/webapp/WEB-INF以下に置かず、src/main/resources以下においてclasspath:~やclasspath*:~で参照する方法もあるらしい。Problems with classpath between Eclipse, Tomcat and JUnit in Spring 3 app - Stack Overflowとか。ただ、classpath内に置く利点が私にはまだ不明なので、とりあえずWEB-INF以下に置く方式のままにしておきます。レファレンスではそうなっていますし。
13. Object Relational Mapping (ORM) Data Access
3. The IoC container
17. Integrating with other web frameworks

Spring application context loading tricks « Gridshoreによるとclasspath*:とワイルドカードではまることもあるらしいので注意。

0 件のコメント:

ブログ アーカイブ