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

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