wolong 发表于 2016-11-26 09:04:56

mybatis-spring整合总结04_Using an SqlSession

Using an SqlSession


在Mybatis中SqlSessionFactory负责创建SqlSession,一旦创建成功,就可以用SqlSession实例来执行映射语句,commit,rollback,close等方法。但当使用Mybatis-Spring时beans将会注入一个线程安全的SqlSession并通过Spring的事务管理自动commit,rollback,close。

由于没有必要直接使用SqlSession,大多数情况下由MapperFactoryBean把mappers注入到beans中。

SqlSessionTemplate
SqlSessionTemplate是MyBatis-Spring的核心类,它负责管理Mybatis的SqlSessions,调用Mybatis的SQL方法和翻译异常。SqlSessionTemplate基于线程安全而且可以被多个DAO共享。
当调用SQL方法(包括getMapper()返回的接口实现类),SqlSessionTemplate将会保证这个SqlSession和Spring事务相联系。并且SqlSessionTemplate管理着session的生命周期,包括commit,rollback,close
SqlSessionTemplate实现了SqlSession接口,目的是替代代码中任何地方出现的SqlSession。
SqlSessionTemplate可以通过一个类型为SqlSessionFactory的构造参数来初始化:
<
Java代码  





[*]bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">   
[*]
<constructor-arg index="0" ref="sqlSessionFactory" />   
[*]</bean>  



   将该sqlSession注入到的类:

Java代码  





[*]public class UserDaoImpl implements UserDao {   
[*]
private SqlSession sqlSession;   
[*]
public void setSqlSession(SqlSession sqlSession) {   
[*]
this.sqlSession = sqlSession;   
[*]    }   
[*]
public User getUser(String userId) {   
[*]
return (User) sqlSession.selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser", userId);   
[*]    }   
[*]}  



public class UserDaoImpl implements UserDao {
private SqlSession sqlSession;
public void setSqlSession(SqlSession sqlSession) {
this.sqlSession = sqlSession;
}
public User getUser(String userId) {
return (User) sqlSession.selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser", userId);
}
}

配置文件:

Java代码  





[*]<bean id="userDao" class="org.mybatis.spring.sample.dao.UserDaoImpl">   
[*]
<property name="sqlSession" ref="sqlSession" />   
[*]</bean>  




另外,也可以通过实现SqlSessionDaoSupport来获取SqlSessionTemplate(推荐):

Java代码  





[*]public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {   
[*]
public User getUser(String userId) {   
[*]
return (User) getSqlSession()   
[*]
.selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser", userId);   
[*]    }   
[*]}  



对应的配置文件:

Java代码  





[*]<bean id="userMapper" class="org.mybatis.spring.sample.mapper.UserDaoImpl">   
[*]
<property name="sqlSessionFactory" ref="sqlSessionFactory" />   
[*]</bean>  
页: [1]
查看完整版本: mybatis-spring整合总结04_Using an SqlSession