SpringFrameworkとの連携

MyBatisとSpringFrameworkとの連携方法に関して、書こうかと思います。
今のところSpring側で、MyBatisとの連携の対応がないようですが、
MyBatisには、Springとの連携用のライブラリがあります。
今回は、これを使うことにします。
MyBatisのサイトからSpringの連携用のライブラリをダウンロードしてきます。
Springと連携するには、org.mybatis.spring.SqlSessionFactoryBeanクラスのオブジェクトが必要です。
SqlSessionFactoryBeanには、データソースが必要です。
applicationContext.xmlにまず下記の定義を行います。

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
	<property name="url" value="jdbc:mysql://localhost:3306/developer"/>
	<property name="username" value="chronos"/>
	<property name="password" value="*******"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource" />
</bean>

あ!ちなみにデータソースは、コマンドラインで起動する場合の設定で、
通常のWebアプリならJNDIを使って下さい。
こっから実際は2通りあるのですが、
一つは、org.mybatis.spring.MapperFactoryBeanを使う方法です。
このクラスは、MyBatisのインターフェイスを実装したプロキシーを生成し、アプリケーションへ注入されます。
設定方法は、下記の内容を設定します。

<bean id="ItemDAO" class="org.mybatis.spring.MapperFactoryBean">
	<property name="mapperInterface"
		value="com.chronos.core.system.persistence.dao.ItemDAO" />
	<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

但し、すべてのDAOをapplicationContext.xmlに定義する必要があるので、結構大変です。
個人的には、次の方法を使ってます。
org.mybatis.spring.mapper.MapperScannerConfigurerクラスを使う方法です。
このクラスは、パッケージを指定してあげるとスキャンしてくれ、そのパッケージ内のクラスをSpring配下にしてくれます。
これなら毎回DAOをapplicationContext.xmlに定義する必要がなくなり楽です。
設定方法は、下記の内容を設定します。

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
	<property name="basePackage" value= "com.chronos.core.system.persistence" />
</bean>

また、クラス名がそのままBeanの名前になります。
例えば、ItmDAOならitemDAOとなります。
但し、上記2つの方法ですが、アノテーション方式の場合、
自動生成のクラスを継承したインターフェイスとかも問題なくジェネレーションギャップパターンを適用することができるのですが、
XMLファイルを使っている場合、うまくいきません。