Spring声明式事务
Spring中的事务管理
大致可分为:编程式事务和声明式事务
编程式事务:
将事务管理代码嵌到业务方法中来控制事务的提交和回滚
缺点:必须在每个事务操作业务逻辑中包含额外的事务代码
声明式事务:
1.一般情况下比编程式事务好用
2.将事务从业务代码中分离出来,已生命的方式实现事务管理
3.将事务管理作为横切关注点,通过AOP方法模块化
实现步骤
再上一篇文章Spring-Mybatis整合中进行扩展
https://blog.csdn.net/shuati2000/article/details/121322228
在spring-dao.xml中
注意使用tx,aop需要导入命名约束
<!--开启Spring事务处理功能-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<constructor-arg ref="dataSource" />
</bean>
<!--配置事务通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="getAllUser" propagation="REQUIRED"/>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!--aop配置-->
<aop:config>
<aop:pointcut id="txPointCut" expression="execution(* com.feng.mapper.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
</aop:config>
进行测试
可设置在一个方法中包含删除和增加,增加成功,删除失败的例子
区别:如果不开启事务,则当在执行一个方法中同时包含增加和删除操作时,若增加成功,删除失败,则同样会增加,不会进行回滚;为了解决这种问题,采用事务的方式