SpringTX的介绍
问题:
我们可以直接从Spring容器中获取mapper层的实例化对象完成数据库操作。⽽在业务层⽅法中很多时候因为业务逻辑的复杂性,会出现在业务层⽅法中调⽤多个数据库操作。⽽之前我们学习过事务的管理,在同⼀个业务中只要有⼀个数据库操作执⾏失败,其他的就算执⾏成功也会⼀并回滚。但是在Spring整合Mybatis后,我们获取的直接是Mapper接⼝的实例化对象,⽽事务的管理需要使⽤connection对象来完成或者SqlSession对象来完成,那么在Spring整合Mybatis后如何声明事务管理代码呢?
解决:
假如我们能够从Spring容器中获取SqlSession对象,那么在业务⽅法A中调⽤了多次的数据库操作,我们就需要在A业务⽅法中的业务逻辑代码之前开启事务管理,在逻辑代码之后进⾏提交或者回滚。假如有10个业务⽅法需要声明事务管理,则需要声明10次,过于⿇烦,⽽且需要修改业务⽅法的源码。基于以上的流程我们发现,该扩展流程完全符合AOP的基本规范,考虑使⽤SpringAOP的⽅式来对业务⽅法进⾏扩展,声明环绕通知,在环绕通知中声明事务管理代码,切点为要进⾏事务管理的业务⽅法。
但是我们⼜⽆法直接获取到SqlSession对象,造成⽆法在环绕通知中声明事务管理代码,⼜发现事务管理
的代码是重复的代码,那么能不能让Spring官⽅给我们直接提供⼀个和Spring容器直接整合好的事务管理类。答案是可以的。
理论图:
spring是什么意思怎么念实现:
Spring的TX
概念:
编程式事务:
事务管理代码由⾃⼰编写。
声明式事务:
事务管理代码由第三⽅直接提供,直接将其组装到功能中即可。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论