MyBatis--事务

article/2025/9/16 5:02:01

事务是基于关系型数据库的企业应用的重要组成部分,用来确保应用程序数据的完整性和一致性。

事务就是一个系列(一组、几个)操作的集合单元,这些操作要么全部完成,要么全部失败,如果某一个操作失败,就算是已经成功执行的操作都会发生回滚,仿佛什么都没发生一样。

事务的四个特性:ACID

原子性:一个事务是一个不可分割的工作单位,事务中的动作要么全部成功要么全部失败

一致性:事务必须保证数据库从一个一致性状态变到另一个一致性状态。

举例: 转账前:A-2000 B-0,总额2000(一致性状态)

            转账中:A-1000 B-0,总额1000(不一致状态)

            转账后:A-1000 B-1000 总额2000(另一个一致性状态)

隔离性:一个事务的执行不能被其他事务干扰,一个事务的内部操作及使用的数据对并发的其他事务时隔离的,并发执行的各个事务不能相互打扰

持久性:(永久性)一个事务一旦提交,对数据库的数据改变时永久的,后面的其他操作和故障都不应该对其有影响

对于不同的数据库,事务管理的API是有差异的。Spring在不同框架的事务管理API的基础之上定义了一个抽象层,可以让开发人员不需要再去了解事务管理的API就能使用Spring的事务管理机制。

Spring提供了两种事务管理方式,一是编程式事务管理,二是声明式事务管理。

编程式事务管理,在业务代码中嵌入事务管理的代码来控制事务的提交和回滚。

声明式事务管理,将事务管理代码从业务代码中抽离出,以声明的方式来实现事务管理。这是最常见的做法

Spring并不会直接管理事务,而是通过事务管理器进行管理的。事务管理器--Spring提供的一个接口--PlatformTransactionManager。Spring为不同的持久化框架提供了不同的实现类,MyBatis就是使用的DataSourceTransactionManager实现类。

注解方式配置声明式事务管理

// 中心配置类中添加注解
@EnableTransactionManagement// 在配置类中创建事务管理器Bean对象// 事务管理器配置@Beanpublic TransactionManager getTransactionManager(){// 使用SpringJDBC 或 MyBatis进行数据持久化使用的事务管理器DataSourceTransactionManager trans = new DataSourceTransactionManager();trans.setDataSource(this.getDataSource());return trans;}// 就在需要处理事务的地方---可以是类,可以是方法,添加@Transactional
// 如果注解是加在类上,则表示该类的所有方法都有事务管理,入宫是加在方法上,表示该方法有事务管理

@Transactional 属性配置事务

ropagation		// 事务的传播行为
isolation       // 事务的隔离级别
rollbackFor     // 事务回滚属性--遇到什么异常必须回滚
noRollbackFor   // 事务回滚属性--遇到什么异常不回滚
timeout         // 事务超时属性--单位-秒,
readOnly        // 事务只读形式--事务只能读取数据不能更新数据

事务的传播行为:当一个事务方法被另一个事务方法调用时,必须指定事务应该如何传播。

事物的传播行为是由事务的传播属性指定。

 设置事务传播属性:

@Transactional(propagation = Propagation.REQUIRES_NEW)

程序运行中经常会出现多个事务同时运行的情况--并发事务。

并发事务容易出现一些问题:脏读、不可重复读、幻读

脏读:指一个事务正在访问数据,并且对数据进行了修改,但是这种数据修改还没有提到数据库时,此时有另外一个事务也访问到了这个数据。这就是脏读。

不可重复读:指在一个事务内,多次读取同一个数据。有事务A访问数据B,此时有一个其他事务AA也访问了数据B。在事务A两次访问数据B,事务AA如果做了修改,事务A两次读取到的数据不一致的。在一个事务中,两次读到不一样的数据,称为不可重复读。

幻读:事务A对学生表中的所有成绩由百分制(0-100)转换成等级制(ABCDEF)。同时事务B向学生表中插入了新数据。事务A再来查看学生数据时,会发现事务B加入的数据(分数还是百分制),就好像发生了幻觉一样。

为了解决并发事务出现的问题,有了事务隔离级别概念

 事务隔离级别:

@Transactional(isolation = Isolation.READ_COMMITTED) // 事务隔离级别读提交

事务的回滚属性:默认情况下只有未检查异常会导致事务回滚,而受检查异常不会

@Transactional(rollbackFor = IOException.class,          // 事务回滚属性--遇到什么异常必须回滚noRollbackFor = ArithmeticException.class)   //  事务回滚属性--遇到什么异常不回滚

事务的超时和只读属性:

超时事务属性:事务在强制回滚以前可以保持多久,防止长期运行的事务占用资源。

只读事务属性:表示该事务只读取数据但不更新数据。

@Transactional(timeout = 10,          // 事务超时属性--单位-秒,readOnly = true)          // 事务只读形式--事务只能读取数据不能更新数据

Spring事务不生效的原因:

  • 数据库引擎不支持事务

  • 没有被Spring管理

  • 方法不是public

  • 自身调用问题

  • 数据源没有配置事务管理器

  • 设置了不支持事务

  • 异常被吃了

  • 异常类型错误


http://chatgpt.dhexx.cn/article/GYpxTQ94.shtml

相关文章

ResNet网络结构解析

ResNet是识别、检测中常用的backbone,看检测相关论文的时候重点都在方法创新上,并没有特别在意网络结构,但是到自己跑实验改网络的时候就涉及到结构细节问题,于是详细的看了下ResNet网络结构。下图是ResNet的网络结构简图&#xf…

resnet网络结构图

很重要,单独放

ResNet网络结构,BN以及迁移学习详解

网络中的亮点: 1.超深的网络结构(超过1000层) 2.提出residual(残差)模块 3.使用Batch Normalization加速训练(丢弃dropout) 左边是将卷积层和池化层进行一个简单的堆叠所搭建的网络结构 20层的训练错误率大概在1%…

ResNet网络结构详解(Tensorflow2.6.0实现网络结构)

文章目录 1.ResNetX网络结构表(1)论文地址:(2)ResNet18网络结构:(3)ResNet34网络结构: 2.卷积神经网络的发展(1).卷积神经网络的发展:(2&#xff…

ResNet网络结构详解,网络搭建,迁移学习

前言: 参考内容来自up:6.1 ResNet网络结构,BN以及迁移学习详解_哔哩哔哩_bilibili up的代码和ppt:https://github.com/WZMIAOMIAO/deep-learning-for-image-processing 一、简介 ResNet 网络是在 2015年 由微软实验室提出&#xf…

ResNet网络结构详解与模型的搭建

ResNET(Deep Residual Learning for Image Recognition ) ResNet网络是在2015年由微软实验室提出,斩获当年ImageNet竞赛中分类任务第一名,目标检测第一名。获得COCO数据集中目标检测第一名,图像分割第一名。下图是ResNet34层模型的结构简图。…

Resnet网络结构图和对应参数表的简单理解

Resnet Resnet即就是残差网络,本文主要是对于resnet给出的网络结构图进行简单解释。 网络结构图 以上就是34层网络的网络结构图。 以上是18层、34层、50层、101层以及152层网络所对应的残差块。 我刚开始在网上看到这两张图片的时候,感觉一点都不懂&a…

pytorch Resnet 网络结构

最近在学习廖老师的pytorch教程,学到Resnet 这部分着实的烧脑,这个模型都捣鼓了好长时间才弄懂,附上我学习过程中最为不解的网络的具体结构连接(网上一直没有找到对应网络结构,对与一个自学的学渣般的我,很…

ResNet网络结构解析--Pytorch

ResNet101–DSSD/SSD (1)ResNet在Pytorch官方代码中有5种不同深度的结构,分别为18、34、50、101、152(各网络深度指的是“需要通过训练更新参数“的层数,如卷积层,全连接层等),和论…

ResNet网络结构详解及代码复现

1. ResNet论文详解 1.1. Introduction 一般网络越深&#xff0c;特征就越丰富&#xff0c;模型效果也就越好。在深度重要的驱动下&#xff0c;出现了2个问题&#xff1a; 梯度消失和梯度爆炸&#xff1a; 梯度消失&#xff1a;误差梯度<1&#xff0c;当网络层数增多时&…

resnet50网络结构_pytorch实践(改造属于自己的resnet网络结构并训练二分类网络)

我的CSDN博客:https://blog.csdn.net/litt1e 我的公众号:工科宅生活 在学习pytorch过程中,突然想拥有属于自己的网络结构,于是便自己选择了一个比较简单的resnet18进行改造,并用其对蚂蚁和蜜蜂进行分类,比较一下没有经过预训练的resnet18好还是自己改造的resnet_diy好。 …

【DL系列】ResNet网络结构详解、完整代码实现

Name&#xff1a; Deep Residual Learning for Image Recognition Author&#xff1a; 何恺明团队 Publiced&#xff1a; 2015.12_CVPR 文章目录 前言1. 残差网络待解决的问题2. ResNet模型亮点 ResNet模型结构1. 残差学习2. Residual模块3. ResNet模型 ResNet-layers模型完整代…

pytorch实现resnet网络结构

ResNet结构和pytorch实现 resnet的网络结构都是经过5个不同数量的残差块最后一个全连接分类完成的。 在resnet50以后&#xff0c;由于层数的增加残差块发生了变化&#xff0c;从原来3x3卷积变为三层卷积&#xff0c;卷积核分别为1x1、3x3、1x1&#xff0c;减少了网络参数。主…

ResNet网络结构搭建

ResNet 下图为包含有18层(17个卷积层和1个全连接层)、34层(33个卷积层和1个全连接层)、50层(49个卷积层和1个全连接层)、101层(100个卷积层和1个全连接层)、152层(151个卷积层和1个全连接层)的resnet结构 下图是论文中给出的两种残差结构。左边的残差结构是针对层数较少网络&a…

ResNet网络结构

注&#xff1a;深度好像就是channel w*h*c 根据b站up霹雳吧啦的讲解做的笔记 视频地址6.1 ResNet网络结构&#xff0c;BN以及迁移学习详解_哔哩哔哩_bilibiliR 6.2 使用pytorch搭建ResNet并基于迁移学习训练_哔哩哔哩_bilibili ResNet网络解决梯度消失、爆炸&#xff0c;以及…

经典网络ResNet介绍

经典网络ResNet(Residual Networks)由Kaiming He等人于2015年提出&#xff0c;论文名为《Deep Residual Learning for Image Recognition》&#xff0c;论文见&#xff1a;https://arxiv.org/pdf/1512.03385.pdf ResNet要解决的是深度神经网络的”退化(degradation)”问题&…

六、ResNet网络详细解析(超详细哦)

1、 RestNet网络 1.1、 RestNet网络结构 ResNet在2015年被提出&#xff0c;在ImageNet比赛classification任务上获得第一名&#xff0c;因为它“简单与实用”并存&#xff0c;之后很多方法都建立在ResNet50或者ResNet101的基础上完成的&#xff0c;检测&#xff0c;分割&…

ResNet结构

文章目录 系列文章目录一、Residual net(残差网络)二、BatchNormalization(BN)三、ResNet结构 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开…

深度学习之图像分类(七)--ResNet网络结构

深度学习之图像分类&#xff08;七&#xff09;ResNet 网络结构 目录 深度学习之图像分类&#xff08;七&#xff09;ResNet 网络结构1. 前言2. Residual3. 网络配置4. 代码 本节学习ResNet网络结构&#xff0c;以及迁移学习入门&#xff0c;学习视频源于 Bilibili&#xff0c;…

[NCTF2019]SQLi 1regexp注入

[NCTF2019]SQLi&regexp注入 知识点&#xff1a; 无引号闭合&#xff0c;可以利用转义符 \ %00作为截断字符可以代替注释符#和-- - regexp注入可以配合 ^ 来爆破字符 解题&#xff1a; 打开题目得到&#xff1a; 可以看做插入语句&#xff1a; select * from users where…