映射器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的事务原理相关推荐

  1. Spring事务专题(三)事务的基本概念,Mysql事务处理原理

    我重新整理了大纲,思考了很久,决定单独将MySQL的事务实现原理跟Spring中的事务示例分为两篇文章,因为二者毕竟没有什么实际关系,实际上如果你对MySQL的事务原理不感兴趣也可以直接跳过本文,等待 ...

  2. Spring的事务原理分析、与mysql的事务关系

    spring事务?mysql事务? 系统中到底谁的事务是在保证数据的一致性,两个事务有什么关系? spring事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,s ...

  3. Spring事务专题(四)Spring中事务的使用、抽象机制及模拟Spring事务实现

    前言 本专题大纲如下: 事务专题大纲 「对于专题大纲我又做了调整哈,主要是希望专题的内容能够更丰富,更加详细」,本来是想在源码分析的文章中附带讲一讲事务使用中的问题,这两天想了想还是单独写一篇并作为事 ...

  4. Spring中事务的使用、抽象机制及模拟Spring事务实现

    本文大纲如下: Spring事务应用大纲 编程式事务 Spring提供了两种编程式事务管理的方法 使用 TransactionTemplate 或者 TransactionalOperator. 直接 ...

  5. 事务例子_Spring事务专题(四)Spring中事务的使用、抽象机制及模拟Spring事务实现...

    Spring中事务的使用示例.属性及使用中可能出现的问题 前言 本专题大纲如下: 「对于专题大纲我又做了调整哈,主要是希望专题的内容能够更丰富,更加详细」,本来是想在源码分析的文章中附带讲一讲事务使用 ...

  6. java 自定义异常 未回滚_抛出自定义异常,spring AOP事务不回滚的解决方案

    spring AOP 默认对RuntimeException()异常或是其子类进行事务回滚,也就是说 事务回滚:throw new RuntimeException("xxxxxxxxxxx ...

  7. spring控制事务:声明式事务(注解)

    声明式事务(注解) spring声明事务的方式,使用注解的方式 @Transactional ⚫ 名称:@Transactional ⚫ 类型:方法注解,类注解,接口注解 ⚫ 位置:方法定义上方,类定 ...

  8. spring声明事务与编程事务概述

    刚才扯了这么多AOP技术,为什么呢,就是为了引入到我们事务里面去的,首先在这里要说一下几个点,在Spring的事务里面,记住一点,Spring的事务一般有几种方式去实现呢,第一种事务叫编程事务,第二种 ...

  9. spring的事务隔离_spring事务基础及常见问题详解

    一:基础知识介绍 1.1:事务四个特性:ACID 原子性(Atomicity):事务是一个原子操作,由一系列动作组成.事务的原子性确保动作要么全部完成,要么全部失败. 一致性(Consistency) ...

  10. 事务的基本概念及Mysql事务实现原理

    Spring事务专题(三)事务的基本概念,Mysql事务处理原理 前言 本专题大纲: 我重新整理了大纲,思考了很久,决定单独将MySQL的事务实现原理跟Spring中的事务示例分为两篇文章,因为二者毕 ...

最新文章

  1. pycharm打开报错python已经停止工作
  2. ansible自己总结(playbook)
  3. 兼容低版本浏览器的一些方法
  4. 工控服务器性能指标,PLC的7大性能指标
  5. 三种常见字符编码简介:ASCII、Unicode和UTF-8
  6. Anaconda中下载速度贼慢?
  7. github超简教程
  8. Andorid Studio NDK 开发 - Hello World
  9. DnsFookup:一款功能强大的DNS重绑定工具
  10. 月薪30K的软件测试简历怎么包装,软件测试项目经验怎么写?软件测试简历编写,赠软件测试简历模板
  11. 山东网通/电信用户DNS设置
  12. 苹果创始人沃兹尼亚克:喜欢小米 乔布斯没那么神!
  13. 梦三国2英霸模式貂蝉攻略(玩大流)
  14. Caffe_stu03_小训练
  15. 售票计算机 制票机的使用方法,铁路客运计算机售票具体操作.pdf
  16. Win10修改登陆密码
  17. DTOJ #5981
  18. tomcat 做为大型应用的配置
  19. OR值的意义和计算公式,和95% CI
  20. kubeadm搭建kubenetes 集群(个人学习版)

热门文章

  1. Container is restarting, wait until the container is running
  2. Java工程师进阶,Java全栈知识体系
  3. UML用例图之寻找参与者与用例
  4. 周末阴雨 在家无事 观《孔子》
  5. hihocoder #1828 : Saving Tang Monk II(BFS)
  6. win10下载日文输入法时,无法使用日文键盘的问题解决
  7. go 调用linux命令ping,使用Golang实现简单Ping过程-Go语言中文社区
  8. 秀米图文排版转html,秀米微信编辑器图文排版H5秀图文教程
  9. 微信小程序-----消息模版(最全解释)
  10. android 应用程序结构是哪些