mybatis-spring官方文档说明
一个使用 MyBatis-Spring 的其中一个主要原因是它允许 MyBatis 参与到 Spring 的事务管理中。而不是给 MyBatis 创建一个新的专用事务管理器,MyBatis-Spring 借助了 Spring 中的 DataSourceTransactionManager 来实现事务管理。
一旦配置好了 Spring 的事务管理器,你就可以在 Spring 中按你平时的方式来配置事务。并且支持 @Transactional 注解和 AOP 风格的配置。在事务处理期间,一个单独的 SqlSession 对象将会被创建和使用。当事务完成时,这个 session 会以合适的方式提交或回滚。
事务配置好了以后,MyBatis-Spring 将会透明地管理事务。这样在你的 DAO 类中就不需要额外的代码了。
Spring中的事务管理分为两类:
- 声明式事务:使用AOP方式进行事务管理(本文章使用此方式)
- 编程式事务:需要在具体的代码中进行事务的管理
Spring开启声明式事务步骤
1.在Spring的applicationContext.xml中配置声明式事务
<!--配置声明式事务-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<constructor-arg ref="dataSource"/>
</bean>
dataSource是applicationContext中配置的Spring连接数据库的数据源
2.结合AOP实现事务的置入
注意要导入tx的命名空间
<!--结合AOP实现事务的植入-->
<!--配置事务通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--给哪些方法配置事务-->
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
这一句中 * 代表的是给所有的方法配置事务,也可以给具体的方法配置事务
propagation配置事务的传播途径,默认是REQUIRED,也可以不加,意思是:支持当前事务,如果当前没有事务就创建一个事务,其他的还有很多值,有兴趣的可以自行查阅
<tx:method name="*" propagation="REQUIRED"/>
3.配置事务的切入
<!--配置事务切入-->
<aop:config>
<aop:pointcut id="txPointCut" expression="execution(* com.tioxy.mapper.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
</aop:config>
这样就通过AOP,不修改源代码的基础上开启事务,其他方式可以参考mybatis-spring官方文档
文章引用
1.mybatis-spring官方文档:http://mybatis.org/spring/zh/transactions.html
2.狂神说JAVA之Spring声明式事务:https://www.bilibili.com/video/BV1WE411d7Dv?p=27