Java的MyBatis+Spring框架中使用數(shù)據(jù)訪問對象DAO模式的方法
SqlSessionTemplate
SqlSessionTemplate是MyBatis-Spring的核心。這個類負(fù)責(zé)管理MyBatis的SqlSession,調(diào)用MyBatis的SQL方法,翻譯異常。SqlSessionTemplate是線程安全的,可以被多個DAO所共享使用。
當(dāng)調(diào)用SQL方法時,包含從映射器getMapper()方法返回的方法,SqlSessionTemplate將會保證使用的SqlSession是和當(dāng)前Spring的事務(wù)相關(guān)的。此外,它管理session的生命周期,包含必要的關(guān)閉,提交或回滾操作。
SqlSessionTemplate實(shí)現(xiàn)了SqlSession,這就是說要對MyBatis的SqlSession進(jìn)行簡易替換。
SqlSessionTemplate通常是被用來替代默認(rèn)的MyBatis實(shí)現(xiàn)的DefaultSqlSession,因為它不能參與到Spring的事務(wù)中也不能被注入,因為它是線程不安全的。相同應(yīng)用程序中兩個類之間的轉(zhuǎn)換可能會引起數(shù)據(jù)一致性的問題。
SqlSessionTemplate對象可以使用SqlSessionFactory作為構(gòu)造方法的參數(shù)來創(chuàng)建。
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory"/> </bean>
這個bean現(xiàn)在可以直接注入到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>
SqlSessionDaoSupport
SqlSessionDaoSupport是一個抽象的支持類,用來為你提供SqlSession。調(diào)用getSqlSession()方法你會得到一個SqlSessionTemplate,這然后可以用于執(zhí)行SQL方法,就像下面這樣:
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{
public User getUser(String userId){
return (User)getSqlSession().selectOne
("org.mybatis.spring.sample.mapper.UserMapper.getUser",userId);
}
}
通常MapperFactoryBean是這個類的首選,因為它不需要額外的代碼。但是,如果你需要在DAO中做其它非MyBatis的工作或需要具體的類,那么這個類就是很有用了。SqlSessionDaoSupport需要一個sqlSessionFactory或sqlSessionTemplate屬性來設(shè)置。這些被明確地設(shè)置或由Spring來自動裝配。如果兩者都被設(shè)置了,那么sqlSessionFactory是被忽略的。
假設(shè)類UserMapperImpl是SqlSessionDaoSupport的子類,它可以在Spring中進(jìn)行如下的配置:
<bean id="userMapper" class="org.mybatis.spring.sample.mapper.UserMapperImpl"> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean>
相關(guān)文章
SpringBoot基于Redis實(shí)現(xiàn)token的在線續(xù)期的實(shí)踐
本文主要介紹了使用Redis實(shí)現(xiàn)JWT令牌在線續(xù)期的方案,通過在線續(xù)期token,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12
java如何根據(jù)HttpServletRequest獲取IP地址
文章介紹了幾種代理服務(wù)器轉(zhuǎn)發(fā)服務(wù)請求頭的方法,這些請求頭可能包含真實(shí)IP地址,但并不是所有的代理都會包括這些請求頭,而且這些IP地址可能被偽造2025-03-03
MyBatis使用級聯(lián)操作解決lombok構(gòu)造方法識別失敗問題
這篇文章主要介紹了MyBatis使用級聯(lián)操作解決lombok構(gòu)造方法識別失敗問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07

