????? 正如第二版,Spring 僅支持 iBatis2。那么我們就想將 MyBatis3 的支持加入到 Spring3.0(參考 Spring 的 Jira 的問題)中。
不幸的是,Spring 3.0 的開發(fā)在 MyBatis 3.0 官方發(fā)布前就結(jié)束了。因為Spring開發(fā)團(tuán)隊不想發(fā)布一個基于非發(fā)行版的MyBatis的整合支持,
那么 Spring官方的支持就不得不等到至少 3.1 版本了。要在 Spring 中支持 MyBatis,MyBatis 社區(qū)認(rèn)為現(xiàn)在應(yīng)該是自己團(tuán)結(jié)貢獻(xiàn)者和有興趣的人
一起來開始進(jìn)行 Spring 和 MyBatis 整合的時候了。 這個小類庫就來創(chuàng)建丟失的粘貼 Spring 和 MyBtatis 這兩個流行框架的膠水。
減少用戶不得不來配置MyBatis和Spring 3.X上下文環(huán)境的樣板和冗余代碼。 它還透明地增加了 Spring對 MyBatis 事務(wù)的支持。
????? 所以盡管MyBatis3提供了對Spring的整合,但是org.springframework.jdbc.datasource.DataSourceTransactionManager這個事務(wù)管理器還是不支持
aop的事務(wù)管理方式,如果你還想設(shè)置你的事務(wù)的隔離級別、只讀(PROPAGATION_REQUIRED、ISOLATION_DEFAULT、readOnly、timeout)。
那么你可以使用org.springframework.transaction.interceptor.TransactionProxyFactoryBean這個事務(wù)攔截器的代理工廠。它還是可以完成的,但是當(dāng)然不會
有HibernateTransactionManager那樣的完美,因為DataSourceTransactionManager不能使用aop來管理我們的事務(wù)。
基本配置如下:
<!-- 配置事務(wù)管理器,注意這里的dataSource和SqlSessionFactoryBean的dataSource要一致,不然事務(wù)就沒有作用了 -->
< bean id ="transactionManager" class ="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
< property name ="dataSource" ref ="dataSource" />
</ bean >
?
<!-- 配置事務(wù)的傳播特性 -->
< bean id ="baseTransactionProxy" class ="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract ="true" >
< property name ="transactionManager" ref ="transactionManager" />
< property name ="transactionAttributes" >
< props >
< prop key ="add*" > PROPAGATION_REQUIRED </ prop >
< prop key ="edit*" > PROPAGATION_REQUIRED </ prop >
< prop key ="remove*" > PROPAGATION_REQUIRED </ prop >
< prop key ="insert*" > PROPAGATION_REQUIRED </ prop >
< prop key ="update*" > PROPAGATION_REQUIRED </ prop >
< prop key ="del*" > PROPAGATION_REQUIRED </ prop >
< prop key ="*" > readOnly </ prop >
</ props >
</ property >
</ bean >
然后,你需要配置的是對那個類的進(jìn)行攔截器事務(wù)管理,就就需要設(shè)置這個接口的parent屬性為baseTransactionProxy,target是該接口的實(shí)現(xiàn)類。如下:
<!-- 為AccountBiz接口配置事務(wù)攔截器,baseTransactionProxy是事務(wù)攔截器,在Controller中獲取這個對象 -->
< bean id ="accountBiz" parent ="baseTransactionProxy" >
<!-- 設(shè)置target,也就是AccountBiz的實(shí)現(xiàn)類 -->
< property name ="target" ref ="accountBizImpl" />
</ bean >
上面的accountBiz是一個接口,它的實(shí)現(xiàn)類的id是accountBizImpl。然后你在Struts或SpringMVC中注入accountBiz這個接口即可使用里面的方法了。
糟糕的是,你需要為所有需要事務(wù)管理的類或接口都要進(jìn)行這個配置!也許你可以配置一個BaseBiz的parent是baseTransactionProxy,然后所有要進(jìn)行
事務(wù)管理的接口或類,繼承或?qū)崿F(xiàn)BaseBiz這個接口。不妨可以嘗試一番!
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
