[mybatis-spring] Transaction 事务/事务处理/事务管理器

Posted zZ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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 有空再搞.

 

以上是关于[mybatis-spring] Transaction 事务/事务处理/事务管理器的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis-Spring 使用总结

MyBatis-Spring--搭建步骤

Mybatis源码解析-mybatis-spring原理解析

mybatis-spring整合

mybatis-spring 整合

[mybatis-spring] Transaction 事务/事务处理/事务管理器