@Transactional事务注解内含乾坤?

文章目录

  • 前置知识
  • 实战
    • 1、无事务操作
    • 2、事务操作
  • 总结

前置知识

MyBatis中的工作原理

  1. 读取配置文件:数据库连接信息、事务管理信息以及映射文件的位置
  2. 加载映射文件:加载Mapper.xml这些映射文件,解析其中的 SQL 语句和结果映射信息
  3. 创建 SqlSessionFactory:通过建造者模式构建
  4. 创建 SqlSession:根据SqlSessionFactory对象获取SqlSession对象
  5. 获取 Mapper:通过 SqlSession,可以获取 Mapper 接口的实例,其实是通过JDBC代理模式获取的代理对象
  6. 执行 SQL 语句:通过 Mapper 接口的方法执行SQL
  7. 处理结果集:SQL 语句执行后,会返回一个结果集,MyBatis 会根据映射文件中的结果映射信息,将结果集转换成 Java 对象
  8. 关闭 SqlSession

实战

1、无事务操作

演示代码如下:

@Override
public void update() throws InterruptedException {for (long i = 100; i < 200; i++) {ForlanA forlanA = new ForlanA();forlanA.setId(i);forlanA.setName("1");forlanADao.update(forlanA);Thread.sleep(100);}
}

控制台打印结果如下:
在这里插入图片描述
得出结论:创建了100个SqlSession,关闭了100个SqlSession

这意味到创建了100连接?

在MyBatis框架中,Creating a new SqlSession 是指创建了一个新的SqlSession对象。SqlSession是MyBatis中的一个接口,它代表了一个数据库会话,用于执行SQL语句并获取结果。每次调用SqlSession.openSession()方法时,MyBatis都会创建一个新的SqlSession实例,但这并不意味着它会立即在MySQL数据库中创建一个新的物理连接。我们都会使用到连接池来管理数据库连接,当创建新的SqlSession时,如果连接池中有空闲的连接,它会从连接池中获取一个已存在的连接;如果没有空闲连接,连接池会根据其配置自动创建一个新的数据库连接。所以,Creating a new SqlSession 并不直接对应于数据库层面的连接创建,而是对应于MyBatis内部的会话管理机制。

如何查看数据库有多少连接?
一般我们只需要关注两个参数,一个是我们配置的最大连接数max_connections;一个是当前当前的连接数Threads_connected。查看方式如下:

-- 查看最大连接数
SHOW VARIABLES LIKE 'max_connections';-- 查看当前连接数
SHOW STATUS LIKE 'Threads_connected';

查看所有活跃的连接及其状态:SHOW PROCESSLIST;
在这里插入图片描述
Time表示连接空闲的时间,单位是秒

2、事务操作

代码加上事务注解,代码如下:

@Override
@Transactional
public void update() throws InterruptedException {for (long i = 100; i < 200; i++) {ForlanA forlanA = new ForlanA();forlanA.setId(i);forlanA.setName("1");forlanADao.update(forlanA);Thread.sleep(100);}
}

控制台打印结果如下:
在这里插入图片描述
得出结论:只创建了1个SqlSession,关闭了1个SqlSession,在中间执行的过程中,通过先释放再获取的方式,避免频繁创建关闭,在最终事务提交的时候,才关闭SqlSession

总结

事务注解不仅开启了事务,而且整个事务只会开启一次SqlSession,执行完才关闭

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

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

相关文章

如何在Windows 10上的命令提示符下更改目录?这里提供方法

如果你刚开始在Windows 10上使用命令提示符,你需要知道如何更改目录。 如何在Windows上打开命令提示符 随着你对Windows 10上的命令提示符越来越熟悉,你需要学习的第一件事是如何更改操作系统文件系统中的目录。有几种方法可以做到这一点,所以我们将带你了解它们。 注意:…

JCR一区级 | Matlab实现TCN-LSTM-MATT时间卷积长短期记忆神经网络多特征分类预测

JCR一区级 | Matlab实现TCN-LSTM-MATT时间卷积长短期记忆神经网络多特征分类预测 目录 JCR一区级 | Matlab实现TCN-LSTM-MATT时间卷积长短期记忆神经网络多特征分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.JCR一区级 | Matlab实现TCN-LSTM-MATT时间卷积长短…

问界新M7 Ultra仅售28.98万元起,上市即交付

5月31日&#xff0c;问界新M7 Ultra正式上市。发布会上&#xff0c;鸿蒙智行旗下多款产品交出最新答卷——问界新M5上市1个月大定突破2万台&#xff1b;智界S7位列30万纯电轿车4月交付量NO.3&#xff1b;问界M9上市5个月大定突破9万台。其中&#xff0c;作为中国高端豪华SUV市场…

STM32CubeMX重新生成代码时如何避免用户代码被覆盖

STM32CubeMX对于在STM32芯片上开发程序非常方便&#xff0c;但是有时发现&#xff1a;使用STM32CubeMX生成keil工程后&#xff0c;在这个工程上开发了一段时间&#xff0c;然后又有外设需要配置&#xff0c;这时使用STM32CubeMX打开MX工程开启外设&#xff0c;最后重新生成keil…

项目启动 | 宏昌电器牵手盘古信息,数字化制造引领企业高质量发展

随着时代的发展&#xff0c;数字化转型已成为实现企业持续增长和塑造竞争优势不可或缺的关键因素。浙江宏昌电器科技股份有限公司&#xff08;以下简称为“宏昌电器”&#xff09;围绕企业战略发展需求&#xff0c;积极加速数字化转型升级进程&#xff0c;以数字化力量推动公司…

docker-compose jira、bugzilla

一、jira 同这篇文章&#xff1a; linux docker 部署破解版本jira:8.4.0——测试体验(非商用)_jira docker-CSDN博客 直到构建完破解版本的镜像就可以了&#xff5e; 二、bugzilla 1. 拉取镜像&#xff1a; 官网镜像搜索bugzilla&#xff0c;第一个就是&#xff1a; 直接…

基于51单片机的电子时钟设计

在单片机技术日趋成熟的今天&#xff0c;其灵活的硬件电路和软件电路的设计&#xff0c;让单片机得到广泛的应用&#xff0c;几乎是从小的电子产品&#xff0c;到大的工业控制&#xff0c;单片机都起到了举足轻重的作用。单片机小的系统结构几乎是所有具有可编程硬件的一个缩影…

计算机图形学入门04:视图变换

1.MVP变换 将虚拟场景中的模型投影到屏幕上&#xff0c;也就是二维平面上&#xff0c;需要分三个变换。 1.首先需要知道模型的位置&#xff0c;也就是前面提到的基本变换&#xff0c;像缩放、平移&#xff0c;旋转&#xff0c;也称为模型(Model)变换。 2.然后需要知道从…

归并排序C++代码详解,思路流程+代码注释,带你完全学会归并排序

归并排序 归并排序是一种经典的排序算法&#xff0c;属于分治算法的一种。其核心思想是将一个大问题分解成若干个较小的子问题来解决&#xff0c;然后根据子问题的解构建原问题的解。在排序问题中&#xff0c;归并排序将数组分成两半&#xff0c;分别对这两半进行排序&#xf…

车载软件架构 - AP AUTOSAR 设计思想及原理

车载软件架构 - AP AUTOSAR 设计思想及原理 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消…

物联网实战--平台篇之(十一)设备管理后台

目录 一、设备数据库 二、添加设备 三、排序设备 四、重命名设备 五、删除设备 六、移动设备 本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/categ…

港科夜闻 | 香港科大于首尔高峰论坛分享三十载发展里程,并与韩国知名机构学府加强交流...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大于首尔高峰论坛分享三十载发展里程&#xff0c;并与韩国知名机构学府加强交流。香港科大致力加强与韩国机构和产业的联系&#xff0c;大学高层管理人员于5月29-30日出席首尔一个备受瞩目的论坛&#xff0c;并与当…

Codeforces Round 949 (Div. 2 ABCD) 视频讲解

A. Turtle and Piggy Are Playing a Game Problem Statement Turtle and Piggy are playing a number game. First, Turtle will choose an integer x x x, such that l ≤ x ≤ r l \le x \le r l≤x≤r, where l , r l, r l,r are given. It’s also guaranteed that …

OpenAI 的 GPT-4o 是目前最先进的人工智能模型!如何在工作或日常生活中高效利用它?

OpenAI 的 GPT-4o 是目前最先进的人工智能模型&#xff01;如何在工作或日常生活中高效利用它&#xff1f; 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大…

RabbitMQ延时队列

一、RabbitMQ下载并使用插件 1、查看RabbitMQ插件的文件路径 docker inspect rabbitmq 找到Mounts下面Name:rabbitmq_plugin的Source即为插件路径 使用 cd 进入到该目录 2、下载插件 wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download…

vue-el-steps 使用1(上一步、下一步)

vue代码 <template> <div class"app-container"> <el-steps :active"active" finish-status"success" simple style"margin-top: 20px"> <el-step title"选择分类"></el-step> <el-step t…

字典树,AcWing 5726. 连续子序列

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 5726. 连续子序列 - AcWing题库 二、解题报告 1、思路分析 字典树存储前缀和 考虑边遍历计算前缀和&#xff0c;边查询字典树 查询流程&#xff1a; 记当前前缀和为s 如果当前位k为1&#xff0c;那么s …

苹果电脑如何清理最近打开的文稿记录 Mac如何移除浏览痕迹保护隐私

日常使用苹果电脑的过程中&#xff0c;我们经常会打开各种文稿&#xff0c;浏览网页等操作。然而&#xff0c;这些操作可能会留下一些记录&#xff0c;涉及到个人隐私和数据安全问题。下面我们来看看苹果电脑如何清理最近打开的文稿记录&#xff0c;Mac如何移除浏览痕迹保护隐私…

C++进阶篇章:set与map(pair , multiset , multimap)

目录 1.关联式容器与序列式容器 2.pair&#xff08;键值对&#xff09; 3.set 构造函数 find函数 count函数&#xff1a; insert函数 4.multiset 5.map insert函数 operator[] 1.关联式容器与序列式容器 C中关联式容器与序列式容器是两种不同的容器 1.关联式容器 关…