Mybatis是一个支持自定义SQL语句,存储过程,高级映射的数据持久化框架。
它封装了JDBC,在框架中隐藏了几乎所有的JDBC的API,这里说下从源码的角度Mybatis 3.x (笔者用的是3.2.8)是如何封装JDBC来实现事务处理的。
回忆下mybatis是怎么使用事务管理的,session.commit(),session.rollback(), JDBC呢,是connection.commit(),connection.rollback()。所以这篇文章的内容就变成了如何从session.commit()到connection.commit()。
首先从session来看看,我们获得一个session对象其实是DefaultSqlSession对象,这个类中的commit() 方法如下。
public void commit() { commit(false); } public void commit(boolean force) { try { executor.commit(isCommitOrRollbackRequired(force)); dirty = false; } catch (Exception e) { throw ExceptionFactory.wrapException("Error committing transaction. Cause: " + e, e); } finally { ErrorContext.instance().reset(); } } private boolean isCommitOrRollbackRequired(boolean force) { return (!autoCommit && dirty) || force; }
然后到CachingExecutor 中的方法
public void commit(boolean required) throws SQLException { delegate.commit(required); tcm.commit(); } //也许对这执行commit的对象不熟悉,看下面 private Executor delegate; private TransactionalCacheManager tcm = new TransactionalCacheManager();
所以真正我们关心的事务是另外一个Executor,BaseExecutor中commit()方法
public void commit(boolean required) throws SQLException { if (closed) throw new ExecutorException("Cannot commit, transaction is already closed"); clearLocalCache(); flushStatements(); if (required) { transaction.commit(); } }
前面两个方法是跟缓存相关,只有最后一个才是我们关心的,JDBCTransaction类中的commit()
public void commit() throws SQLException { if (connection != null && !connection.getAutoCommit()) { if (log.isDebugEnabled()) { log.debug("Committing JDBC Connection [" + connection + "]"); } connection.commit(); } }
现在我们明白了,JDBCTransaction中包装了一个connection的对象。这也是我们在使用mybatis配置文件时设置的事务管理类。
<environments default="development"> <environment id="development"> <transactionManager type="JDBC"> <!--这里--> <property name="..." value="..."/> </transactionManager> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments>
相关推荐
mybatis源码分析教程.jpg 0.5MB 再谈柔性事务,为何我们要抛弃标准事务.zip 463.9MB 一堂课搞定MySql优化.zip 524.8MB 一节课垂直打击JVM.zip 569.1MB 双十一技术复盘 高并发秒杀系统解密.zip 953.8MB 深入理解...
基于SpringCloud+Oauth2+MyBatis+Elasticsearch+Docker+Kubernetes的商城系统项目源码+数据 核心功能: 平台管理端:商品管理、订单管理、会员管理、促销管理、店铺管理、运营管理、统计分析、系统设置、日志系统。 ...
微信小程序项目源码-家庭事务管理微信小程序+ssm框架+论文,是一个集成了家庭事务管理功能的微信小程序,采用SSM(Spring、SpringMVC、MyBatis)框架进行开发,并附带了详细的论文文档。本项目旨在提供一个便捷、...
本设计重点从系统概述、系统分析、系统设计、数据库设计、系统测试和总结这几个方面对该高校办公室行政事务管理系统进行阐述,用户通过该高校办公室行政事务管理系统可以查询自己喜欢的信息。 该高校办公室行政事务...
该系统可以帮助学生理解并掌握软件开发的全过程,包括需求分析、系统设计、编码实现以及测试部署等。
本项目为一款基于微信小程序的家庭事务管理应用,结合SSM(Spring、SpringMVC、MyBatis)框架进行开发,旨在提供便捷、高效的家庭事务处理方式。用户可通过微信小程序轻松创建、查看、编辑和删除各类家庭事务,实现...
天道酬请,一步一个坑弹簧注释...源码分析1.1 Spring 5.X源码分析1.1.1 Spring5源码深度解析(一)之理解配置注解1.1.2 Spring5源码深度分析(二)之理解@ Conditional,@ Import注解1.1.3 Spring5深度源码分析(三)之...
Kafka、Zookeeper、手写Tomcat+心跳机制、手写RPC框架、Dubbo框架、Netty源码解析、Eureka、ChannelPipeline源码解析、ElasticSearch、RocketMQ、K8S全实战、大型互联网高可用设计、ELK日志监控收集及网站流量监控...
积分管理系统java源码 基础知识 java基础 基本类型(占用的内存)和包装类型 数组和对象 程序控制语句,if、switch...分析Mybatis动态代理的真正实现 手动实现Mini版本的Mybatis 分布式 分布式原理 分布式架构的演进过
│ │ 13.RPC底层通讯原理之Netty线程模型源码分析.wmv │ │ │ ├─14.分库分表之后分布式下如何保证ID全局唯一性 │ │ 14.分库分表之后分布式下如何保证ID全局唯一性.mp4 │ │ │ └─15.大型公司面试必答之...
分片JDBC是JDBC的扩展,提供了诸如分片,读/写拆分和BASE事务之类的分布式功能。 特征 1.分片 分布式数据库中支持的聚合功能,分组依据,排序依据和限制SQL。 支持联接(内部/外部)查询。 分片运算符= ,支持...
系统采用MySQL作为后端数据库,使用MyBatis作为ORM框架进行数据持久化操作。前端使用Thymeleaf模板引擎,结合Bootstrap框架,提供了良好的用户界面体验。此外,系统还实现了权限控制,不同的用户角色有不同的操作...
第12章:讲解了如何在Spring中集成Hibernate、myBatis等数据访问框架,同时,读者还将学习到ORM框架的混用和DAO层设计的知识。 第13章:本章重点对在Spring中如何使用Quartz进行任务调度进行了讲解,同时还涉及...
MyBatis:作为系统的持久层框架,MyBatis负责与数据库进行交互,提供了简洁的SQL映射和事务管理功能。 前端技术:系统采用了HTML5、CSS3、JavaScript等前端技术,为用户提供了良好的界面体验。 功能说明: 专利...
"weixin126民大食堂用餐综合服务平台+ssm(源码+部署说明+演示视频+源码介绍+lw).rar" 是一个压缩文件,其中包含了一套基于Spring、SpringMVC和MyBatis(简称SSM)框架的微信点餐系统。这个平台旨在为民大(可能指...
25、TCC型事务框架的源码实现讲解 26、TCC型事务方案的项目实战应用介绍 27、TCC型事务方案的项目实战应用部署 28、TCC型事务方案的项目实战应用测试 29、TCC型事务方案的应用优化提升 30、课程总结
其中,Spring负责实现依赖注入和事务管理,SpringMVC负责处理请求和响应,MyBatis负责数据持久化操作。 前端技术:平台前端采用了HTML5、CSS3和JavaScript等技术,实现了响应式布局,可以适应不同设备的屏幕尺寸。...
其中,Spring负责项目的依赖注入和事务管理,SpringMVC负责处理请求和响应,MyBatis负责与数据库进行交互。 功能模块: 用户管理:包括用户注册、登录、个人信息管理等功能。 课程管理:包括课程分类、课程列表...
"weixin050高校体育场管理系统+ssm(源码+部署说明+演示视频+源码介绍+lw).rar" 这个资源包是一个针对高校体育场地管理的软件系统,它使用了SSM框架(Spring + SpringMVC + MyBatis)进行开发。以下是对该系统的...
--多种数据源的配置、JdbcTemplate、事务的处理 20 Spring Boot AOP 21 Spring Boot Starter18:31 --快速构建自定义的Spring Boot Starter 22 Spring Boot 日志30:58 --演示了如何在Spring Boot里面使用日志配置...