mybatis事务原理与集成spring的事务原理
映射器Mapper实现事务的原理:
mapper本质是一个接口代理类,调用接口等某个方法后,获取字符串等于接口全路径名称+方法名去缓存里面找相应的sql语句,然后调用Transaction#getConnection获取数据库连接,后续的提交回滚也是调用这个接口等方法。
sqlsession实现事务的原理:
同上,可以设置自动提交事务
mybatis集成spring实现事务的原理
1、spring实现事务有3种方法,声明式事务包括xml和注解,编程实现事务也就是利用spring事务相关API,xml和注解本质上aop+编程实现事务;
public class UserService {private final PlatformTransactionManager transactionManager;public UserService(PlatformTransactionManager transactionManager) {this.transactionManager = transactionManager;}public void createUser() {1TransactionStatus txStatus =transactionManager.getTransaction(new DefaultTransactionDefinition());try {2userMapper.insertUser(user);} catch (Exception e) {3transactionManager.rollback(txStatus);throw e;}4transactionManager.commit(txStatus);}
}
代码1设置自动提交为false,表示开启一个事务;代码2底层会调用Transaction接口的实现类SpringTransaction,把数据库连接放到ThreadLocal,如果后面再有mapper或者sqlsession调用Transaction#getConnection方法,就会获取保存在ThreadLocal里面的数据库连接;代码3和代码4则会获取上面等数据库连接进行提交和回滚。可以知道最开始去获取数据库连接的是代码1,后面代码都是直接从ThreadLocal缓存里面拿。
为什么DataSourceTransactionManager和mybatis需要同一个数据库源?
答:首先DataSourceTransactionManager会去数据库源获取数据库连接,然后放到ThreadLocal,mybatis去SpringTransaction拿数据库连接,得到的是上面ThreadLocal的数据库连接。
还有一个疑问,不在事务里面执行mapper方法是自动提交,在事务里面mapper则是手动提交,这是怎么实现的?
mybatis事务原理与集成spring的事务原理相关推荐
- Spring事务专题(三)事务的基本概念,Mysql事务处理原理
我重新整理了大纲,思考了很久,决定单独将MySQL的事务实现原理跟Spring中的事务示例分为两篇文章,因为二者毕竟没有什么实际关系,实际上如果你对MySQL的事务原理不感兴趣也可以直接跳过本文,等待 ...
- Spring的事务原理分析、与mysql的事务关系
spring事务?mysql事务? 系统中到底谁的事务是在保证数据的一致性,两个事务有什么关系? spring事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,s ...
- Spring事务专题(四)Spring中事务的使用、抽象机制及模拟Spring事务实现
前言 本专题大纲如下: 事务专题大纲 「对于专题大纲我又做了调整哈,主要是希望专题的内容能够更丰富,更加详细」,本来是想在源码分析的文章中附带讲一讲事务使用中的问题,这两天想了想还是单独写一篇并作为事 ...
- Spring中事务的使用、抽象机制及模拟Spring事务实现
本文大纲如下: Spring事务应用大纲 编程式事务 Spring提供了两种编程式事务管理的方法 使用 TransactionTemplate 或者 TransactionalOperator. 直接 ...
- 事务例子_Spring事务专题(四)Spring中事务的使用、抽象机制及模拟Spring事务实现...
Spring中事务的使用示例.属性及使用中可能出现的问题 前言 本专题大纲如下: 「对于专题大纲我又做了调整哈,主要是希望专题的内容能够更丰富,更加详细」,本来是想在源码分析的文章中附带讲一讲事务使用 ...
- java 自定义异常 未回滚_抛出自定义异常,spring AOP事务不回滚的解决方案
spring AOP 默认对RuntimeException()异常或是其子类进行事务回滚,也就是说 事务回滚:throw new RuntimeException("xxxxxxxxxxx ...
- spring控制事务:声明式事务(注解)
声明式事务(注解) spring声明事务的方式,使用注解的方式 @Transactional ⚫ 名称:@Transactional ⚫ 类型:方法注解,类注解,接口注解 ⚫ 位置:方法定义上方,类定 ...
- spring声明事务与编程事务概述
刚才扯了这么多AOP技术,为什么呢,就是为了引入到我们事务里面去的,首先在这里要说一下几个点,在Spring的事务里面,记住一点,Spring的事务一般有几种方式去实现呢,第一种事务叫编程事务,第二种 ...
- spring的事务隔离_spring事务基础及常见问题详解
一:基础知识介绍 1.1:事务四个特性:ACID 原子性(Atomicity):事务是一个原子操作,由一系列动作组成.事务的原子性确保动作要么全部完成,要么全部失败. 一致性(Consistency) ...
- 事务的基本概念及Mysql事务实现原理
Spring事务专题(三)事务的基本概念,Mysql事务处理原理 前言 本专题大纲: 我重新整理了大纲,思考了很久,决定单独将MySQL的事务实现原理跟Spring中的事务示例分为两篇文章,因为二者毕 ...
最新文章
- pycharm打开报错python已经停止工作
- ansible自己总结(playbook)
- 兼容低版本浏览器的一些方法
- 工控服务器性能指标,PLC的7大性能指标
- 三种常见字符编码简介:ASCII、Unicode和UTF-8
- Anaconda中下载速度贼慢?
- github超简教程
- Andorid Studio NDK 开发 - Hello World
- DnsFookup:一款功能强大的DNS重绑定工具
- 月薪30K的软件测试简历怎么包装,软件测试项目经验怎么写?软件测试简历编写,赠软件测试简历模板
- 山东网通/电信用户DNS设置
- 苹果创始人沃兹尼亚克:喜欢小米 乔布斯没那么神!
- 梦三国2英霸模式貂蝉攻略(玩大流)
- Caffe_stu03_小训练
- 售票计算机 制票机的使用方法,铁路客运计算机售票具体操作.pdf
- Win10修改登陆密码
- DTOJ #5981
- tomcat 做为大型应用的配置
- OR值的意义和计算公式,和95% CI
- kubeadm搭建kubenetes 集群(个人学习版)
热门文章
- Container is restarting, wait until the container is running
- Java工程师进阶,Java全栈知识体系
- UML用例图之寻找参与者与用例
- 周末阴雨 在家无事 观《孔子》
- hihocoder #1828 : Saving Tang Monk II(BFS)
- win10下载日文输入法时,无法使用日文键盘的问题解决
- go 调用linux命令ping,使用Golang实现简单Ping过程-Go语言中文社区
- 秀米图文排版转html,秀米微信编辑器图文排版H5秀图文教程
- 微信小程序-----消息模版(最全解释)
- android 应用程序结构是哪些