yBatis3與spring整合之使用SqlSession(SqlSessionDaoTemplate類)
----------
注:這是手工編寫實現的方式(其實可以直接使用注入映射器的)
SqlSessionTemplate
SqlSessionTemplate是MyBatis-Spring的核心。這個類負責管理MyBatis的SqlSession,調用MyBatis的SQL方法,翻譯異常。SqlSessionTemplate是線程安全的,可以被多個DAO所共享使用。
當調用SQL方法時,包含從映射器getMapper()方法返回的方法,SqlSessionTemplate將會保證使用的SqlSession是和當前Spring的事務相關的。此外,它管理session的生命周期,包含必要的關閉,提交或回滾操作。
SqlSessionTemplate實現了SqlSession,這就是說要對MyBatis的SqlSession進行簡易替換。
SqlSessionTemplate通常是被用來替代默認的MyBatis實現的DefaultSqlSession,因為它不能參與到Spring的事務中也不能被注入,因為它是線程不安全的。相同應用程序中兩個類之間的轉換可能會引起數據一致性的問題。
SqlSessionTemplate對象可以使用SqlSessionFactory作為構造方法的參數來創建。
- <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
- <constructor-arg index="0" ref="sqlSessionFactory"/>
- </bean>
這個bean現在可以直接注入到DAO bean中。你需要在bean中添加一個SqlSession屬性,就像下面的代碼:
- 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);
- }
- }
如下注入SqlSessionTemplate:
- <bean id="userDao" class="org.mybatis.spring.sample.dao.UserDaoImpl">
- <property name="sqlSession" ref="sqlSession"/>
- </bean>