Spring3.0とMyBatisの設定メモ
SpringとMyBatisを連携して使う場合、MyBatisが用意している連携用ライブラリを使うらしい。
というわけでメモ。正しいのかどうかは知らないけど、ちゃんとできてるようには見える。
- 設定ファイル
データソースとMyBatisとトランザクションの定義。
トランザクションとかDaoの定義はアノテーションでやるのでナシ。
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="xxx" /> <property name="url" value="xxx" /> <property name="username" value="xxx" /> <property name="password" value="xxx" /> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="/WEB-INF/sqlMapConfig.xml" /> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" />
- Daoクラス
SqlSessionDaoSupportを継承するとSqlSessionが取得できるようになる。
@Component public class HogeDaoImpl extends SqlSessionDaoSupport implements HogeDao { @Override public Hoge select(String sqlId, Object params) { return (Hoge) getSqlSession().selectOne(sqlId, params); } }
で、理由はわからないけど、tx:annotation-drivenの定義とコンポーネントの自動登録
(component-scan)の定義が同じファイルないとトランザクションがきちんと反映されない
罠にはまる。トランザクションは開始してなくとも、SQLは実行できてしまうという
気付かなきゃちょっと怖いことに。
MyBatisでないサンプルだと別で書いてあったりするんだけどなぁ。
そもそも設定ファイルの読み込み順とかどう解決してるのかとか
まだまだわからんことだらけだ・・・。