この章では、MyBatis-Spring のインストール・設定手順と、トランザクション処理を含むシンプルなアプリケーションの構築する方法について説明します。
MyBatis-Spring を使うためには、 mybatis-spring-x.x.x.jar と依存するライブラリをクラスパスに追加するだけで OK です。
Maven をお使いの場合は、 pom.xml に次の dependency を追加してください。
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>x.x.x</version> </dependency>
MyBatis と Spring を組み合わせて使う場合、Spring の Application Context 内に少なくとも SqlSessionFactory と一つ以上の Mapper インターフェイスを定義する必要があります。
MyBatis-Spring では SqlSessionFactory の生成に SqlSessionFactoryBean を使います。この Factory Bean を設定するため、Spring の XML 設定ファイルに次の Bean を追加してください。
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> </bean>
SqlSessionFactory が DataSource を必要としている点に注意してください。 どのような DataSource でも構いません。通常の手順で設定してください。
Mapper インターフェイスが次のように定義されている場合...
public interface UserMapper { @Select("SELECT * FROM users WHERE id = #{userId}") User getUser(@Param("userId") String userId); }
MapperFactoryBean を使ってこのインターフェイスを Spring に登録する場合、以下のように設定します。
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value="org.mybatis.spring.sample.mapper.UserMapper" /> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean>
ここで指定した Mapper は、実装クラスではなく インターフェイス である必要がありますので注意してください。
この例では、アノテーションを使って SQL を指定していますが、Mapper XML ファイルを使うこともできます。
上記のように設定しておけば、あとは他の Spring Bean と同様にビジネス/サービス層のオブジェクトにインジェクト(注入)することができます。
MapperFactoryBean は SqlSession の生成とクローズを行います。
もし Spring のトランザクション内で実行された場合は、トランザクション終了時にセッションがコミットあるいはロールバックされます。
最後にもう一点、全ての例外は Spring の DataAccessException に変換されます。
MyBatis のデータメソッドは、一行だけで実行可能となります。
public class FooServiceImpl implements FooService { private UserMapper userMapper; public void setUserMapper(UserMapper userMapper) { this.userMapper = userMapper; } public User doSomeBusinessStuff(String userId) { return this.userMapper.getUser(userId); }