Java的MyBatis+Spring框架中使用數(shù)據(jù)訪問(wèn)對(duì)象DAO模式的方法
SqlSessionTemplate
SqlSessionTemplate是MyBatis-Spring的核心。這個(gè)類(lèi)負(fù)責(zé)管理MyBatis的SqlSession,調(diào)用MyBatis的SQL方法,翻譯異常。SqlSessionTemplate是線程安全的,可以被多個(gè)DAO所共享使用。
當(dāng)調(diào)用SQL方法時(shí),包含從映射器getMapper()方法返回的方法,SqlSessionTemplate將會(huì)保證使用的SqlSession是和當(dāng)前Spring的事務(wù)相關(guān)的。此外,它管理session的生命周期,包含必要的關(guān)閉,提交或回滾操作。
SqlSessionTemplate實(shí)現(xiàn)了SqlSession,這就是說(shuō)要對(duì)MyBatis的SqlSession進(jìn)行簡(jiǎn)易替換。
SqlSessionTemplate通常是被用來(lái)替代默認(rèn)的MyBatis實(shí)現(xiàn)的DefaultSqlSession,因?yàn)樗荒軈⑴c到Spring的事務(wù)中也不能被注入,因?yàn)樗蔷€程不安全的。相同應(yīng)用程序中兩個(gè)類(lèi)之間的轉(zhuǎn)換可能會(huì)引起數(shù)據(jù)一致性的問(wèn)題。
SqlSessionTemplate對(duì)象可以使用SqlSessionFactory作為構(gòu)造方法的參數(shù)來(lái)創(chuàng)建。
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory"/> </bean>
這個(gè)bean現(xiàn)在可以直接注入到DAO bean中。你需要在bean中添加一個(gè)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是一個(gè)抽象的支持類(lèi),用來(lái)為你提供SqlSession。調(diào)用getSqlSession()方法你會(huì)得到一個(gè)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是這個(gè)類(lèi)的首選,因?yàn)樗恍枰~外的代碼。但是,如果你需要在DAO中做其它非MyBatis的工作或需要具體的類(lèi),那么這個(gè)類(lèi)就是很有用了。SqlSessionDaoSupport需要一個(gè)sqlSessionFactory或sqlSessionTemplate屬性來(lái)設(shè)置。這些被明確地設(shè)置或由Spring來(lái)自動(dòng)裝配。如果兩者都被設(shè)置了,那么sqlSessionFactory是被忽略的。
假設(shè)類(lèi)UserMapperImpl是SqlSessionDaoSupport的子類(lèi),它可以在Spring中進(jìn)行如下的配置:
<bean id="userMapper" class="org.mybatis.spring.sample.mapper.UserMapperImpl"> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean>
- 詳解Javaee Dao層的抽取
- Java之dao模式詳解及代碼示例
- java 設(shè)計(jì)模式(DAO)的實(shí)例詳解
- Java利用自定義注解、反射實(shí)現(xiàn)簡(jiǎn)單BaseDao實(shí)例
- Java 中利用泛型和反射機(jī)制抽象DAO的實(shí)例
- Java的Spring框架中DAO數(shù)據(jù)訪問(wèn)對(duì)象的使用示例
- 通過(guò)代理類(lèi)實(shí)現(xiàn)java連接數(shù)據(jù)庫(kù)(使用dao層操作數(shù)據(jù))實(shí)例分享
- Java接口DAO模式代碼原理及應(yīng)用詳解
相關(guān)文章
4個(gè)Java8中你需要知道的函數(shù)式接口分享
Java?8?中提供了許多函數(shù)式接口,包括Function、Consumer、Supplier、Predicate?等等。本文主要來(lái)和大家介紹一下它們的具體使用,需要的可以參考一下2023-04-04Intellij IDEA導(dǎo)入eclipse web項(xiàng)目的操作步驟詳解
Eclipse當(dāng)中的web項(xiàng)目都會(huì)有這兩個(gè)文件,但是idea當(dāng)中應(yīng)該是沒(méi)有的,所以導(dǎo)入會(huì)出現(xiàn)兼容問(wèn)題,但是本篇文章會(huì)教大家如何導(dǎo)入,并且導(dǎo)入過(guò)后還能使用tomcat運(yùn)行,需要的朋友可以參考下2023-08-08SpringBoot整合Elasticsearch游標(biāo)查詢(xún)的示例代碼(scroll)
這篇文章主要介紹了SpringBoot整合Elasticsearch游標(biāo)查詢(xún)(scroll),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10spring循環(huán)注入異常問(wèn)題的解決方案
今天小編就為大家分享一篇關(guān)于spring循環(huán)注入異常問(wèn)題的解決方案,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12spring?boot?Mybatis?攔截器實(shí)現(xiàn)拼接sql和修改的代碼詳解
這篇文章主要介紹了spring?boot?Mybatis?攔截器實(shí)現(xiàn)拼接sql和修改,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05詳解如何把Java中if-else代碼重構(gòu)成高質(zhì)量代碼
這篇文章主要介紹了詳解如何把Java中if-else代碼重構(gòu)成高質(zhì)量代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11