Mybatis 事务接口

当我们从数据源中得到一个可用的数据库连接之后,就可以开启一个数据库事务了,事务成功开启之后,我们才能修改数据库中的数据。

在修改完成之后,我们需要提交事务,完成整个事务内的全部修改操作,如果修改过程中出现异常,我们也可以回滚事务,放弃整个事务中的全部修改操作。

可见,控制事务在一个以数据库为基础的服务中,是一件非常重要的工作

为此,MyBatis 专门抽象出来一个 Transaction 接口。

Transaction 接口是 MyBatis 中对数据库事务的抽象,其中定义了提交事务、回滚事务,以及获取事务底层数据库连接的方法。

Transaction接口源码:

/*** Wraps a database connection.* Handles the connection lifecycle that comprises: its creation, preparation, commit/rollback and close.** @author Clinton Begin*/
public interface Transaction {// 获取该事务关联的数据库连接对象Connection getConnection() throws SQLException;// 提交当前事务void commit() throws SQLException;// 回滚当前事务void rollback() throws SQLException;// 关闭当前事务关联的底层数据库连接void close() throws SQLException;// 获取当前事务超时时间Integer getTimeout() throws SQLException;
}

JdbcTransaction、ManagedTransaction 是 MyBatis 自带的两个 Transaction 接口实现,这里也使用到了工厂方法模式,如下图所示:

在这里插入图片描述
TransactionFactory 是用于创建 Transaction 的工厂接口,其中最核心的方法是 newTransaction() 方法,它会根据数据库连接或数据源创建 Transaction 对象。

public interface TransactionFactory {// 对TransactionFactory对象进行配置,一般紧跟在TransactionFactory对象初始化之后,// 该方法主要是完成对TransactionFactory工厂的一些自定义配置default void setProperties(Properties props) {}// 在指定的数据库连接之上创建一个Transaction对象Transaction newTransaction(Connection conn);// 从指定数据源中获取数据库连接,并在此数据库连接之上创建一个关联的Transaction对象Transaction newTransaction(DataSource dataSource,TransactionIsolationLevel level, boolean autoCommit);
}

JdbcTransactionFactoryManagedTransactionFactoryTransactionFactory 的两个实现类,分别用来创建 JdbcTransaction 对象和 ManagedTransaction 对象,具体实现比较简单,这里就不再展示,你若感兴趣的话可以参考源码进行学习。

接下来,我们看一下 JdbcTransaction 的实现,其中维护了事务关联的数据库连接以及数据源对象,同时还记录了事务自身的属性,例如,事务隔离级别和是否自动提交。

在构造函数中,JdbcTransaction 并没有立即初始化数据库连接(也就是 connection 字段),connection 字段会被延迟初始化,具体的初始化时机是在调用 getConnection() 方法时,通过dataSource.getConnection() 方法完成初始化。

在日常使用数据库事务的时候,我们最常用的操作就是提交和回滚事务,Transaction 接口将这两个操作抽象为 commit() 方法和 rollback() 方法。在 commit() 方法和 rollback() 方法中,JdbcTransaction 都是通过 java.sql.Connection 的同名方法实现事务的提交和回滚的。

ManagedTransaction 的实现相较于 JdbcTransaction 来说,有些许类似,也是依赖关联的 DataSource 获取数据库连接,但其 commit()、rollback() 方法都是空实现,事务的提交和回滚都是依靠容器管理的,这也是它被称为 ManagedTransaction 的原因。

另外,与 JdbcTransaction 不同的是,ManagedTransaction 会根据初始化时传入的 closeConnection 值确定是否在事务关闭时,同时关闭关联的数据库连接(即调用其 close() 方法)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/589114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA:利用JUnit进行高效的单元测试

1、简述 在软件开发中,单元测试是确保代码质量和可维护性的关键步骤。JUnit作为Java领域最流行的单元测试框架之一,提供了简单而强大的测试工具,可以帮助开发者在项目开发过程中及时发现和修复代码中的问题。本文将介绍JUnit的基本用法以及一…

【每日一题】一周中的第几天

文章目录 Tag题目来源解题思路方法一:模拟 写在最后 Tag 【模拟】【数学】【2023-12-30】 题目来源 1185. 一周中的第几天 解题思路 方法一:模拟 思路 题目中的日期是在 1971 到 2100 年之间的有效日期,即 1971-01-01 到 2100-12-31 范围…

【c语言】飞机大战2

1.优化边界问题 之前视频中当使用drawAlpha函数时,是为了去除飞机后面变透明,当时当飞机到达边界的时候,会出现异常退出,这是因为drawAlpha函数不稳定,昨天试过制作掩码图,下载了一个ps,改的话&#xff0c…

易舟云财务软件使用教程【文章目录】

易舟云财务软件使用教程【文章目录】 1、财务软件导论2、易舟云财务软件3、财务软件原理4、账套5、会计凭证6、资金日记账7、发票8、员工工资9、固定资产10、期末处理(结转与结账)11、会计账簿12、财务报表13、财务软件设置 1、财务软件导论 财务软件导论 2、易舟云财务软件 …

Java循环高级(无限循环,break,continue,Random,逢七过,平方根,判断是否是质数,猜数字小游戏)

文章目录 1.无限循环概念:for格式:while格式:do...while格式:无限循环的注意事项: 2.条件控制语句break:continue: 3. Random使用步骤: 4. 逢七过5. 平方根6.判断是否为质数7. 猜数字小游戏 1.无限循环 概…

分布式【RPC 常见面试题】

一、注册中心 策略:服务注册原理、注册中心结构、zookeeper的原理、几个注册中心的区别、分布式算法、分布式事务。 项目细节:服务注册、服务发现、服务注销、监听机制 介绍一下服务注册中心怎么做的? (1)服务发现&a…

初识SpringBoot(2023最后一篇文章)

初识SpringBoot 1、SpringBoot概述 Spring是什么? Spring是一个于2003 年兴起的一个轻量级开源Java开发框架,由Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》。Spring是为了解决企业级应用开发的复杂性而创建的,使…

2024-01-01 事业-代号s-营销的16个关键词

摘要: 2024-01-01 事业-代号s-营销的16个关键词 营销的16个关键词 洞察冲突听诉求,舍得付出愿重复。 循序渐进常劝诱,产品价格明心头。 同行比对巧树敌,游戏娱乐本通俗。 善于借势非对称,打碎试错上坦途。 叶茂中大师,在《营销的16个关键词》一书中,写出了他认为在营…

Linux系统安装DockerDocker-Compose

1、Docker安装 下载Docker依赖的组件 yum -y install yum-utils device-mapper-persistent-data lvm2 设置下载Docker服务的镜像源,设置为阿里云 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安装Docker服务 …

关于数据库归档

目录 1.数据库归档是什么2.MySQL 归档工具有哪些 本文主要介绍数据库归档基本概念和目的,以及对于MySQL来说,有哪些归档工具。 1.数据库归档是什么 数据库归档是一种数据管理策略,它涉及将旧的、不经常访问的数据移动到一个单独的存储设备&…

【中南林业科技大学】计算机组成原理复习包括题目讲解(超详细)

来都来了点个赞收藏关注一下再走呗🌹🌹🌹🌹 第1章:绪论 1.冯诺依曼机特点,与现代计算机的区别 冯诺依曼计算机的基本思想是:程序和数据以二进制形式表示,存储程序控制。在计算机中&…

2024年【高压电工】找解析及高压电工考试技巧

题库来源:安全生产模拟考试一点通公众号小程序 高压电工找解析根据新高压电工考试大纲要求,安全生产模拟考试一点通将高压电工模拟考试试题进行汇编,组成一套高压电工全真模拟考试试题,学员可通过高压电工考试技巧全真模拟&#…

如何使用Docker compose安装Spug并实现远程访问登录界面

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、Cpolar杂谈 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. Docker安装Spug二. 本地访问测试三. Linux 安装cpolar四. 配置Spug公网访问…

电脑报错“kernelbase.dll”文件缺失,软件游戏无法启动的解决方法

很多小伙伴留言说,每次自己要游戏或软件的时候,电脑就会弹出报错框,不知道应该怎么办? 其实,Windows报错提示已经说明了,程序找不到名为“kernelbase.dll”的文件,需要重新安装修复这个问题。 …

【GoLang】Go语言几种标准库介绍(三)

文章目录 前言几种库debug 库 (各种调试文件格式访问及调试功能)相关的包和工具:示例 encoding (常见算法如 JSON、XML、Base64 等)常用的子包和其主要功能:示例 flag(命令行解析)关键概念:示例示例执行 总结专栏集锦写在最后 前言 上一篇&a…

SpringBoot入门到精通-Spring Boot Jasypt Encrypt 演示

这是 spring boot 应用程序,展示了如何使用 Jasypt 加密值。 关于Jasypt Jasypt 为您提供简单的单向(摘要)和双向加密技术。开放 API,可与任何 JCE 提供程序一起使用,而不仅仅是默认的 Java VM 提供程序。Jasypt 可以很容易地与 Bouncy Castle 等知名提供商一起使用。了解…

QtitanRibbon 开始使用实例

新建一个界面程序: 修改项目里面的源码: 至此,一个简单界面就出来了,效果如下所示:

创建并使用自己的C++模块(Windows10+MSVC)

module是C20种新引入的特性,关于module的介绍和好处,网上已有大量的文章,此处也不再赘述,本文仅记录在个人的环境上创建一个简单的module并使用这个module。 环境同上一篇文章( windows10,MSVC C工具链&am…

游戏软件缺少d3dcompiler.dll文件的多种修复方法分享

在操作系统中,d3dcompiler.dll是一个非常重要的组件,主要负责DirectX图形技术的编译和解析。许多用户在安装或使用某些软件时,提示“缺少d3dcompiler.dll”。这个错误通常出现在游戏或应用程序运行时,它会导致程序无法正常启动或运…

C#-CSC编译环境搭建

一.Microsoft .NET Framework 确保系统中安装Microsoft .NET Framework相关版本下载 .NET Framework 4.7 | 免费官方下载 (microsoft.com)https://dotnet.microsoft.com/zh-cn/download/dotnet-framework/net47 二.编译环境搭建 已经集成编译工具csc.exe,归档至gitcode,实现us…