1.介绍:
MyBatis-Spring的整合,帮助你使代码和Spring无缝对接,Spring会为你加载创建必须的MyBatis类,将会控制事物,翻译表达式,而且,还可以向Service Bean中注入映射器Mapper。
2.安装:
要运行MyBatis-Spring模块,需要包含mybatis-spring-1.0.0-SNAPSHOT.jar文件即可。并且在类路径中加入依赖。
如果你使用的Maven,那么在pom.xml文件中,追加下面的代码即可:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
3.创建SqlSessionFactory
要使用MyBatis,你需要创建一个SqlSessionFactory的实例,MyBatis-Spring会在Spring启动的时候为你创建,下面这段配置,就是为你展示了需要创建SqlSessionFactoryBean的配置:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
根据上面的代码,要设置一个SqlsessionFactory,需要一个数据源,如下代码所示:
<!--定义数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${driverName}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
<property name="maxActive" value="30"></property>
<property name="maxIdle" value="10"></property>
<property name="minIdle" value="5"></property>
<property name="maxWait" value="5000"></property>
</bean>
其中,driverName,url,username,password可以通过从其他属性文件中设置,如下代码所示:
<!--配置数据源属性文件 -->
<context:property-placeholder location="jdbc.properties" />
当使用MyBatis-Spring时,在Spring的配置文件中应该包含transactionManager部分,
当注入映射器是,映射器列表也是需要的。
4.注入映射器
MyBatis-Spring允许你在Service Bean中注入映射器。当使用映射器时,就像调用Dao那样来调用映射器就可以了。
但是,你就不需要进行任何Dao实现的编码,因为MyBatis会为你进行。
使用注入的映射器,你的代码就不会出现任何MyBatis-Spring依赖和MyBatis依赖。
下面是一个简单的映射器,映射器就是一个接口:
public interface UserMapper {
User getUser(String userId);
}
下面是你使用MyBatis创建映射器的方式:
<bean id="userMapper" class="org.mybatis.spring.MapperFactoryBean">
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<property name="mapperInterface" value="sample.UserMapper" />
</bean>
当使用映射器时,你不需要在spring的配置文件中创建映射器列表,因为映射器可以在Mybatis启动的时候自行完成注册。
现在你的映射器已经准备在Service对象中注入了
<bean id="testService" class="sample.testServiceImpl">
<property name="userMapper" ref="userMapper" />
</bean>
5.使用SqlSessionDaoTemplate和SqlSessionDaoSupport
5.1 SqlSessionDaoTemplate
如果需要使用MyBatis的sqlsession,那么,需要使用SqlSessionDaoTemplate,因为这个对象能够创建一个新的SqlSession或者从当前活动的SqlSession。
它也可以给Spring的通用DataAccessException层次结构翻译表达式。
SqlSessionDaoTemplate可以使用SqlSessionFactory作为构造方法参数来创建。
SqlSessionDaoTemplate sessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
如下面片段所示,你可以使用SqlSessionDaoTemplate来代替SqlSession执行MyBatis方法(selectOne,selectList…)
public User getUser(String userId) {
return (User) sessionTemplate.selectOne("sample.UserMapper.getUser", userId);
}
SqlSessionDaoTemplate也提供一个通用的方法,使用一个自定义的SqlSessionCallback作为参数,这样你可以在一个SqlSession上执行多个方法:
public void insertUser(final User user) {
getSqlSessionTemplate().execute(new SqlSessionCallback<Object>() {
public Object doInSqlSession(SqlSession sqlSession) throws SQLException {
sqlSession.insert("sample.UserMapper.insertUser", user);
sqlSession.insert("sample.UserMapper.insertAccount", user.getId());
return null;
}
});
}
5.2 SqlSessionDaoSupport
SqlSessionDaoSupport是为你创建的SqlSessionDaoTemplate的支持类,这样,你就可以通过调用getSqlSessionTemplate()方法来使用:
public class UserMapperDaoImpl extends SqlSessionDaoSupport implements UserMapper {
public User getUser(String userId) {
return (User) getSqlSessionTemplate().selectOne("sample.UserMapper.getUser", userId);
}
}