[mybatis-spring] Transaction 事務/事務處理/事務管理器


使用mybatis-spring的主要原因之一就是:

mybatis-spring允許mybatis參與到spring 事務中.

mybatis-spring leverage[use (something) to maximum advantage)] 存在的DataSourceTransactionManager ,

而無需為mybatis特意新建一個新的事務管理.

 

一旦Spring tansaction manager被配置,你可以像配置Spring中的transactions as you normally would.

支持兩種配置方式:

  1.@Transactional 注釋

  2.AOP style configuration

transaction存續期間,一個單獨的sqlSession 對象會被創建並被使用.

當事務完成之后,這個session會被提交或者回滾。

標准配置

在Spring XML 配置文件中創建 數據源事務管理器DataSourceTransactionManager即會允許Spring進行事務管理.

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource" />
</bean>

數據源由任意 JDBC DataSource配置.(見sqlSessionFactoryBean 的文章).

這包含連接池以及數據源(由JNDI查詢獲取的).

注意: 事務管理器使用的DataSource必須和SqlSessionFactoryBean的DataSource保持一致.

 


 

以下部分對我目前用處不大,只是順便翻譯下.


 

Container Managed Transactions

如果你在使用JEE 容器並想要Spring參與到container managed transactions(CMT)中,

那么Spring應該配置JtaTransactionManager 或者一個它的容器特定的子類.

最容易的方法是使用Spring事務命名空間:

<tx:jta-transaction-manager />

這個配置中,mybatis會表現地和其他由CMT配置的Spring事務源一樣.

SPring會自動使用任何存在的容器事務並且制定一個SqlSession給它.

如果沒有事務啟動,但是根據事務配置需要一個,那么Spring就會啟動一個新的單CMT.

注意,如果你使用CMT但不想使用Spring 事務管理,就不能配置Spring事務管理器 ,

並且必須使用mybatis基礎的ManagedTransactionFactory來配置SqlSessionFactoryBean.

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="transactionFactory">
    <bean class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory" />
  </property>  
</bean>

以↑部分對我目前用處不大,只是順便翻譯下.


 

最后還有一塊:Programmatic Transaction Management 有空再搞.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM