什么是事务?Mysql事务怎么用?Mybatis怎么操作事务的?Spring呢?快进来看看

article/2025/9/15 3:55:53

目录

一、计算机中的事务

1. 概念

2.事务的ACID特性

3.事务类型

1)手动事务

2)自动事务

4.为什么需要事务?

5.优点

二、MySQL事务

1.语法格式:

2.关闭自动提交,开启新事务

3.开启自动提交,关闭事务控制

三、Mybatis事务

Mybatis开关事务控制的方式

四、spring声明式事务

1.使用XML配置事务

2.使用注解声明式事务

3.使用java类配置事务

五、总结


一、计算机中的事务

1. 概念

 指将一系列数据操作捆绑成为一个整体并进行统一管理的机制。

注: 这里的事务一般指sql中的事务

2.事务的ACID特性

1).原子性(Atomicity ) :事务是一个完整的操作,事务的各步操作都是一个不可再分的最小单元。

2).一致性(Consistency ) : 事务中的所有元素必须作为一个整体提交或回滚,当事务完成时,数据必须处于一致状态。

3).隔离性(lsolation ): 所有并发事务之间是彼此隔离、独立,不应以任何方式依赖于或影响其他事务。

4).持久性(Durability) : 事务完成后,它对数据库的修改被永久保持。

3.事务类型

1)手动事务

  • 需要手动提交事务,进行事务控制。

2)自动事务

  • 自动提交事务,不能对事务进行控制。

4.为什么需要事务?

   当实现转账时,A向B转账过程中,系统发生错误,这笔帐没有在他们之间的手中,为避免发生此类错误,所以就需要事务处理,如果事务执行时遇到错误,则就必须回滚,回滚后,数据将全部恢复到操作前的状态,A的转账也会恢复。

5.优点

 如果其中一个sql发生异常,就不会提交,会进行一个回滚操作,避免了异常的发生等。

二、MySQL事务

 MySQL中的事务默认是隐式(自动)事务,如果需要开启手动事务控制,需使用语法开启。

1.语法格式:

#开启事务
begin; 或 start transaction;#一组作为事务运行的SQL语句delete from student where id=1;#根据需求回滚,还没提交前rollback;
#提交事务
commit; 

2.关闭自动提交,开启新事务

set autocommit=0;#一组作为事务运行的SQL语句
#提交事务
commit;   

3.开启自动提交,关闭事务控制

set autocommit=1;#一组作为事务运行的SQL语句或#放在事务最后一句,关闭事务,恢复Sql  

三、Mybatis事务

Mybatis在配置文件中可以设置事务的类型:如下图有关Mybatis事务类型的介绍:

图片来源:Mybtais中文网: 配置_MyBatis中文网

Mybtais配置时一般都使用JDBC类型来进行事务管理。

<transactionManager type="JDBC"/>

注明: 如上图提示所说,如果要使用spring+Mybtais,就没有必要配置了,Spring有自带的管理器。

Mybatis开关事务控制的方式

 如下图所示:Mybatis给我们提供了两个控制事务得重载方法,第一个openSession()方法可以在查询得情况下使用,openSession(boolean var1)条件是来判断事务是否是自动提交

1.false 默认值: 关闭自动提交事务,需要手动提交(开启事务控制)

2.true 开启:  开启自动提交事务(关闭事务控制)

 注明: 一般执行增删改方法时需要设置事务的开关,关闭自动提交,就需要手动提交,反正,不需要。

比如:

 public int addSysUser(SysUser sysUser) throws IOException {//关闭自动提交,开启事务控制SqlSession sqlSession = MybatisUtil.getSqlSession(false);int i = sqlSession.getMapper(UserMapper.class).addSysUser(sysUser);//手动提交sqlSession.commit();return userMapper.addSysUser(sysUser);}

四、spring声明式事务

没声明前: 需要手动处理事务,比如回滚提交,遇到多个方法达不到重用性。

声明后 : 开启事务控制,体现事务的ACID特性,通过底层AOP动态代理自动处理事务的提交和回滚,无需手动处理

配置前提: 在配置事务之前,需要先配置事务管理器 : 提供对事务处理的全面支持和统一管理

1.使用XML配置事务

 配置事务管理器

  <!--配置事务管理器--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!--定义数据源--><property name="dataSource" ref="dataSource"/></bean>

- 设置事务属性(非必要)

SUPPORTS :  表示如果存在一个事务,则支持当前事务,如果当前没有事务,则按非事务执行,适用于查询。

REQUIRED : 默认值。表示如果存在一个事务,则支持当前事务;如果当前没有事务,则开启一个新的事务,适用于增删改。

以上事务规则属性只是常用的,还有其他事务属性,这里小半就不一一概述了哦!

<tx:advice  id="txAdvice" transaction-manager="transactionManager"><tx:attributes><!--propagation: 指定事务级别规则--><tx:method name="get*" propagation="SUPPORTS"/><tx:method name="add*" propagation="REQUIRED"/><tx:method name="del*" propagation="REQUIRED"/><tx:method name="*" propagation="REQUIRED"/></tx:attributes>
</tx:advice>

- 定义事务切面

<!--定义事务切面: 指定切入点选择要开启事务的方法--><aop:config><aop:pointcut id="serviceMethod" expression="execution(* service.StudentServiceImpl.*(..))"/><!--引用事务规则级别--><aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod"/></aop:config>

2.使用注解声明式事务

- 给需要开启事务的方法增加注解

@Transactional
pubic void method(){...}

- 在xml配置文件中扫描事务

<!--开启事务注解驱动-->
<tx:annotation-driven/>

注明 : 也可以直接以类的方式声明@Transactional,表示该类里所有的方法都声明了事务。

3.使用java类配置事务

- 在java配置类里增加@EnableTransactionManagement注解

//该注解扫描事务
@EnableTransactionManagement
@Configuration
public class ApplicationConfing{....}

在需要开启事务的方法上面增加@Transactional注解

五、总结

 其实不管用什么框架或者不同的数据库,事务都要遵循ACID特性,和提交回滚的方法,不过需要注意的是每个框架开启事务的方式都是不同的。


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

相关文章

SpringBoot Mybatis事物管理

本文主要讲述springboot提供的声明式的事务管理机制。 一、一些概念 声明式的事务管理是基于AOP的&#xff0c;在springboot中可以通过Transactional注解的方式获得支持&#xff0c;这种方式的优点是&#xff1a; 1&#xff09;非侵入式&#xff0c;业务逻辑不受事务管理代码…

spring boot配置mybatis和事务管理

spring boot配置mybatis和事务管理 一、spring boot与mybatis的配置 1.首先,spring boot 配置mybatis需要的全部依赖如下&#xff1a; <!-- Spring Boot 启动父依赖 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>s…

《深入理解mybatis原理》 MyBatis事务管理机制

MyBatis作为Java语言的数据库框架&#xff0c;对数据库的事务管理是其非常重要的一个方面。本文将讲述MyBatis的事务管理的实现机制。首先介绍MyBatis的事务Transaction的接口设计以及其不同实现JdbcTransaction 和 ManagedTransaction&#xff1b;接着&#xff0c;从MyBatis的…

MyBatis事务管理

一、概述 事务管理对于企业应用来说是至关重要的&#xff0c;即使出现异常情况&#xff0c;它也可以保证数据的一致性。 Spring Framework对事务管理提供了一致的抽象&#xff0c;其特点如下&#xff1a; 为不同的事务API提供一致的编程模型&#xff0c;比如JTA(Java Transac…

深入浅出Mybatis系列(五)Mybatis事务篇

在学习Mysql事务开始,分为两步。一.先看下Mysql的事务级别都有什么,然后看Mysql的事务级别设置命令。及常见问题。二.JDK是如何处理数据库操作的呢? Mybatis是如何实现JDK定义的事务级别操作。 一.Mysql的事务级别及常见概念 MySQL事务隔离级别 事务隔离级别脏读不可重复读幻…

详解 MyBatis 事务管理,彻底颠覆你对事务的理解!

来源&#xff1a;https://my.oschina.net/zudajun/blog/666764 前言 说到数据库事务&#xff0c;人们脑海里自然不自然的就会浮现出事务的四大特性、四大隔离级别、七大传播特性。四大还好说&#xff0c;问题是七大传播特性是哪儿来的&#xff1f;是 Spring 在当前线程内&…

MyBatis的事务

Mybatis管理事务是分为两种方式: (1)使用JDBC的事务管理机制,就是利用java.sql.Connection对象完成对事务的提交 (2)使用MANAGED的事务管理机制&#xff0c;这种机制mybatis自身不会去实现事务管理&#xff0c;而是让程序的容器&#xff08;JBOSS,WebLogic&#xff09;来实现对…

MyBatis--事务

事务是基于关系型数据库的企业应用的重要组成部分&#xff0c;用来确保应用程序数据的完整性和一致性。 事务就是一个系列(一组、几个)操作的集合单元&#xff0c;这些操作要么全部完成&#xff0c;要么全部失败&#xff0c;如果某一个操作失败&#xff0c;就算是已经成功执行…

ResNet网络结构解析

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

resnet网络结构图

很重要&#xff0c;单独放

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

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

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

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

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

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

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

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

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

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

pytorch Resnet 网络结构

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

ResNet网络结构解析--Pytorch

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

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模型完整代…