使用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 有空再搞.