Mybatis源码解析之事务管理
目录
- Mybatis事务管理
- 和Spring整合后的事务管理
Mybatis事务管理
我们可以在mybatis-config.xml中配置事务管理器的实现
<transactionManager type="JDBC"/>
当值为JDBC时,事务管理实现类为JdbcTransaction,底层利用数据库的Connection来管理事务
当值为MANAGED时,事务管理实现类为ManagedTransactionFactory,但它对事务的管理是一个空实现,将事务管理交给外部容器
JdbcTransaction
ManagedTransaction
和Spring整合后的事务管理
mybatis和spring整合创建TransactionFactory的时候,如果没有设置,则会将其设置为SpringManagedTransactionFactory
org.mybatis.spring.SqlSessionFactoryBean#buildSqlSessionFactory
但是真正执行事务的时候,一般情况下不会由SpringManagedTransaction来执行,因为我们一般都把事务交给spring来管理,当把事务交给spring管理的时候this.isConnectionTransactional=true,因此commit和rollback相当于是空实现
mybatis和spring整合后,一般还是由spring框架中的DataSourceTransactionManager来进行事务管理
如果你对spring进行事务管理不清楚的话,等我后续的spring专栏
到此这篇关于Mybatis源码解析之事务管理的文章就介绍到这了,更多相关Mybatis事务管理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
MyBatis源码解析之Transaction事务模块
目录 1.回顾 2.事务模块 2.1 事务接口 2.2 MyBatis事务类型 2.3 JDBC事务模型 2.4 关于自动提交 2.5 问题 1.回顾 之前介绍了Environment环境类,这其实是一个单例类,在MyBatis运行开启后只会存在一个唯一的环境实例,虽然我们可以在Configuration配置文件中配置多个环境,但是项目运行中只会存在其中的一个,一般项目会存在开发环境和测试环境.生产环境三大环境,其是否可以设置到配置文件中,在开发时使用开发环境,测试时使用测试环境,正式运营时可以
-
SpringMVC+MyBatis声明式事务管理
采用的基本搭建环境:SpringMVC.MyBatis.MySQL.tomcat Spring事务管理分解了传统的全局事务管理和本地事务管理的劣势,使得在任何环境中都可以使用统一的事务管理模型,你可以写一次代码,然后在不同的环境从你的代码里面配置不同的事务管理策略,Spring提供两种事务管理策略:一种是声明式事务管理策略,另一种是编程式事务管理策略,这里主要介绍声明式事务管理策略 由于采用的是SpringMVC. MyBatis,故统一采用了标注来声明Service.Controller 由于
-
浅谈MyBatis 事务管理
1. 运行环境 Enviroment 当 MyBatis 与不同的应用结合时,需要不同的事务管理机制.与 Spring 结合时,由 Spring 来管理事务:单独使用时需要自行管理事务,在容器里运行时可能由容器进行管理. MyBatis 用 Enviroment 来表示运行环境,其封装了三个属性: public class Configuration { // 一个 MyBatis 的配置只对应一个环境 protected Environment environment; // 其他属性 ...
-
Mybatis源码解析之事务管理
目录 Mybatis事务管理 和Spring整合后的事务管理 Mybatis事务管理 我们可以在mybatis-config.xml中配置事务管理器的实现 <transactionManager type="JDBC"/> 当值为JDBC时,事务管理实现类为JdbcTransaction,底层利用数据库的Connection来管理事务 当值为MANAGED时,事务管理实现类为ManagedTransactionFactory,但它对事务的管理是一个空实现,将事务管理交给外部
-
Spring源码解析之事务传播特性
一.使用方式 可以采用Transactional,配置propagation即可. 打开org.springframework.transaction.annotation.Transactional可见默认传播特性是REQUIRED. /** * The transaction propagation type. * <p>Defaults to {@link Propagation#REQUIRED}. * @see org.springframework.transaction.inte
-
MyBatis源码解析——获取SqlSessionFactory方式
目录 MyBatis源码解析_获取SqlSessionFactory 首先从Resources.getResourceAsReader(path) 进入到SqlSessionFactoryBuilder.build(Reader)方法中 进入到mapperElement(XNode)方法后 如果子节点名字不是package 经过一系列的解析,终于完成了 用MyBatis的配置文件获取SqlSessionFactory MyBatis源码解析_获取SqlSessionFactory 我们都知道,在
-
Java Spring AOP源码解析之事务实现原理
目录 不用Spring管理事务? 编程式事务管理 使用PlatformTransactionManager 使用TransactionTemplate 声明式事务管理 使用@Transactional注解 源码解析 参考博客 总结 不用Spring管理事务? 让我们先来看一下不用spring管理事务时,各种框架是如何管理事务的 使用JDBC来管理事务 使用Hibernate来管理事务 业务逻辑和事务代码是耦合到一块的,并且和框架的具体api绑定了.当我们换一种框架来实现时,里面对事务控制的代码就
-
【MyBatis源码全面解析】MyBatis一二级缓存介绍
MyBatis缓存 我们知道,频繁的数据库操作是非常耗费性能的(主要是因为对于DB而言,数据是持久化在磁盘中的,因此查询操作需要通过IO,IO操作速度相比内存操作速度慢了好几个量级),尤其是对于一些相同的查询语句,完全可以把查询结果存储起来,下次查询同样的内容的时候直接从内存中获取数据即可,这样在某些场景下可以大大提升查询效率. MyBatis的缓存分为两种: 一级缓存,一级缓存是SqlSession级别的缓存,对于相同的查询,会从缓存中返回结果而不是查询数据库 二级缓存,二级缓存是Mapper
-
Android10 客户端事务管理ClientLifecycleManager源码解析
目录 正文 ClientLifecycleManager ClientTransaction TransactionExecutor executeLifecycleState 正文 在Android 10 App启动分析之Activity启动篇(二)一文中,简单地介绍了Activity的生命周期管理器是如何调度Activity进入onCreate生命周期的流程.这篇文章,我们将详细地分析framework中activity的生命周期管理功能,从更宏观的角度来更全面地了解生命周期及相关事务的工作
-
Spring源码解析之编程式事务
一.前言 在Spring中,事务有两种实现方式: 编程式事务管理: 编程式事务管理使用TransactionTemplate可实现更细粒度的事务控制.声明式事务管理: 基于Spring AOP实现.其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务. 声明式事务管理不需要入侵代码,通过@Transactional就可以进行事务操作,更快捷而且简单(尤其是配合spring boot自动配置,可以说是精简至极!),且大部分业务都可
-
从Spring源码解析事务失效的原因
目录 一.前言 二.方法不是 public 的 三.内部方法间调用导致事务失效 四.异常类型是否配置正确 五.异常被catch住 一.前言 1.Bean是否是代理对象 2.入口函数是否是public的 3.数据库是否支持事务(Mysql的Mvlsam不支持事务),行锁才支持事务 4.切点是否配置正确 5.内部方法间调用导致事务失效 因为this不是代理对象,可以配置 expose-proxy="true",就可以通过AopContext.currentProxy()获取到当前类的代理对
-
Mango Cache缓存管理库TinyLFU源码解析
目录 介绍 整体架构 初始化流程 读流程 写流程 事件处理机制 主流程 write 清理工作 缓存管理 什么是LRU? 什么是SLRU? 什么是TinyLFU? mango Cache中的TinyLFU counter counter的初始化 counter的使用 lruCache slruCache filter TinyLFU的初始化 TinyLFU写入 TinyLFU访问 增加entry的访问次数 估计entry访问次数 总结 介绍 据官方所述,mango Cache是对Guava Cac
随机推荐
- Spring Boot学习入门之表单验证
- js定义对象简单学习例子
- 用JavaScript显示浏览器客户端信息的超相近教程
- JS组件Bootstrap实现弹出框效果代码
- 详解Java中如何正确书写单例模式
- JavaScript判断DOM何时加载完毕的技巧
- aspx不显示ViewState的实例
- PHP对文件进行加锁、解锁实例
- thinkPHP简单导入和使用阿里云OSSsdk的方法
- Python变量和数据类型详解
- 彻底弄懂CSS盒子模式系列教程集合
- 模糊查询的通用存储过程
- Hallo.js基于jQuery UI所见即所得的Web编辑器
- PHP获取栏目的所有子级和孙级栏目的ID号示例
- LNMP 解决Access Denied错误详细介绍
- Android TextView 设置字体大小的方法
- Android仿微信和QQ多图合并框架(类似群头像)的实现方法
- Linux下进程数量的限制pid_max的配置方法
- WPF自定义TreeView控件样式实现QQ联系人列表效果
- 基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)