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

news2024/11/17 13:44:22

目录

一、计算机中的事务

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://www.coloradmin.cn/o/353533.html

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

相关文章

Meta AR眼镜主管:正开发史无前例的AR,但要解决很多困难

前不久&#xff0c;Meta CTO Andrew Bosworth在个人博客上“怒斥”公司内部不够专注&#xff0c;应该将资源投入在有核心竞争力、高投资回报率的业务上&#xff0c;而不是开发取悦用户却不赚钱的产品。尽管删除一些小众功能后&#xff0c;用户可能会不满&#xff0c;但为了让Me…

Bi系统跟数据中台的区别是什么?

随着数据时代的发展&#xff0c;BI分析是当今数据时代必不可少的能力之一。BI系统通过系统化产品化的方法&#xff0c;能够大幅降低数据的获取成本、提升数据使用效率。同时借助可视化、交互式的操作&#xff0c;可以高效支持业务的分析及发展。 BI如此火热&#xff0c;随之而…

openpnp - 增加散料飞达

文章目录openpnp - 增加散料飞达概述笔记飞达在设备上的放置方向编带料在飞达中的方向将相机移动到飞达料的第一孔的中心捕获保存第1孔中心编带设置测试相机位置是否正确测试吸嘴的位置是否正确将吸嘴回到安全位置测试是否能正确抓料ENDopenpnp - 增加散料飞达 概述 使用open…

MySQL性能调优与设计——MySQL调优——慢查询

MySQL调优–慢查询 MySQL调优金字塔 很明显从图上可以看出&#xff0c;越往上走&#xff0c;难度越来越高&#xff0c;收益却越来越小。 对于架构调优&#xff0c;在系统设计时首先需要充分考虑业务的实际情况&#xff0c;是否可以把不适合数据库做的事情放到数据仓库、搜索引…

分享111个HTML旅游交通模板,总有一款适合您

分享111个HTML旅游交通模板&#xff0c;总有一款适合您 111个HTML旅游交通模板下载链接&#xff1a;https://pan.baidu.com/s/1VHJSBVJbj4PQpPAwxysJBg?pwd8b17 提取码&#xff1a;8b17 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 汽车租赁平台网页模板 汽…

时的科技迎1亿融资,这辆“空中的士”能否实现真正飞行?

近期&#xff0c;进行载人eVTOL的研发、生产和销售的时的科技宣布完成1亿元Pre-A轮融资&#xff0c;成立不到两年&#xff0c;这已是时的科技的第三轮融资&#xff0c;此前&#xff0c;时的科技已获得蓝驰创投和德迅投资千万美元种子轮投资。在不少人看来&#xff0c;时的科技所…

恢复出厂设置在哪里?抓住这份官方指南(Win10电脑)

当电脑经常报告错误&#xff0c;并伴有运行缓慢和停滞等问题时&#xff0c;很可能是计算机老化造成的。想要解决这个问题&#xff0c;可以通过恢复出厂设置使得电脑恢复成初始状态&#xff0c;自然而然问题就解决了。 但是很多人不知道&#xff0c;恢复出厂设置在哪里&#xf…

【自学Linux】Linux运行级别

Linux运行级别 Linux运行级别教程 Linux 可以支持运行级别的设置&#xff0c;运行级别就是操作系统当前正在运行的功能级别&#xff0c;级别是从 0 到 6。Centos7 系统之前的版本是通过 /etc/inittab 文件来定义系统&#xff0c;而 CentOS7 用的是 /lib/systemd/system/runle…

MySQL数据库调优————JOIN优化

JOIN的种类 LEFT JOIN SELECT <select_list> FROM Table_A A LEFT JOIN Table_B B ON A.Key B.Key求的是A所有的数据以及A与B的交集 RIGHT JOIN SELECT <select_list> FROM Table_A A RIGHT JOIN Table_B B ON A.Key B.Key求的是B所有的数据以及A和B的交集 IN…

Nginx 新增模块 http_image_filter_module 来实现动态生成缩略图

前言 通过 nginx 的 HttpImageFilterModule 模块裁剪过大的图片到指定大小&#xff0c;这个nginx自带的模块是默认关闭的&#xff0c;所以需要重新编译nginx加上此模块。 一、编译 nginx 1.查看 nginx 模块 由于nginx 是之前装好的&#xff0c;这里需要先看一下是否安装了H…

Sentinel简单使用

目录 1.官网 2.主要作用 3.安装启动 3.功能详细 3.1实时监控 3.2 簇点链路 3.3流控规则 3.4熔断规则 3.4热点key限流 3.5系统规则 4.SentinelResource注解解释 1.官网 gitHub GitHub - alibaba/Sentinel: A powerful flow control component enabling reliability…

尚医通 (十六)搭建平台用户系统前端环境 | 用户平台首页数据

目录一、服务端渲染技术NUXT1、什么是服务端渲染2、什么是NUXT二、NUXT环境初始化1、下载压缩包2、解压3、修改package.json4、修改nuxt.config.js5、在命令提示终端中进入项目目录6、安装依赖7、测试运行8、NUXT目录结构9、封装axios10、引入element-ui三、首页静态数据整合1、…

Docker镜像发布到阿里云和私有库

目录 一、Docker镜像 &#xff08;一&#xff09;概述 &#xff08;二&#xff09;Docker镜像加载原理 &#xff08;三&#xff09;镜像分层结构优势 &#xff08;四&#xff09;重点理解 &#xff08;五&#xff09;docker commit操作实例 &#xff08;六&#xff09;总…

如何解决nas无公网问题,实现kodbox可道云内网映射外网访问

目前&#xff0c;市面上有很多NAS产品&#xff0c;如群晖、威联通以及华硕NAS等&#xff0c;它们都自带提供了一些基础的文件管理功能&#xff0c;有的也可以直接在NAS上使用文件管理的应用程序。 kodbox可道云是一个基于 Web 技术的私有云和在线文件管理系统&#xff0c;有着…

考了PMP证后工资大概是多少 ?(含pmp资料)

这个岗位的不同还有每个公司的薪资也是不一样的&#xff0c;具体的数字肯定是没有的&#xff0c;但大概的比例还是有的&#xff0c;据PMI调查&#xff0c;在获得PMP证书的人当中&#xff0c;在PMP认证一年后&#xff0c;年薪有所增长的比例为66%&#xff0c;上涨幅度主要集中在…

抓包工具Charles(二)-移动端APP抓包(设置手机代理、安装证书)

安装好Charles之后&#xff0c;还只能捕获电脑的接口请求想要抓取移动设备的APP还需要设置代理、安装证书。 文章目录一、抓包原理二、手机设置网络代理1、 查看电脑的IP地址&#xff08;local IP address&#xff09;2、设置手机网络代理&#xff08;1&#xff09;iOS设备&…

美团:某动态线程池框架是官方开源的么?

大家好&#xff0c;我是马称。 最近&#xff0c;有很多同学在微信上问我这么一个问题&#xff1a; Hippo4j 动态线程池框架是美团开源的么&#xff1f; 类似于这样的问题还挺多&#xff0c;在这里统一回复下&#xff1a; 美团官方并没有开源任何关于动态线程池的框架。 美…

【深度学习】多分类问题和多标签分类问题

上一章——激活函数 文章目录什么是多分类问题Softmax贝叶斯公式softmax的损失函数多标签分类问题什么是多分类问题 在之前的课程中&#xff0c;我们学习了二分问题&#xff0c;二分问题中的所有数据会被分类为0和1&#xff08;或者Ture和False&#xff09;两种输出标签。但是…

Java_小项目书城

1.概述 书城的基本功能&#xff1a; 展示书籍上新书籍下架书籍退出应用 书城项目所涉及到的知识点&#xff1a; 用户交互–键盘录入分支结构&#xff0c;循环结构面向对象的思维&#xff0c;封装对象集合的使用 2.菜单的编写 这部分代码就是读取用户键盘的录入&#xff0…

Qt线程池

目录1、线程池是什么&#xff1f;2、Qt线程池2.1、用法例程2.2、线程池对性能的提升2.3、运行算法单线程写法线程池写法1、线程池是什么&#xff1f; 线程池是一种线程使用模式&#xff0c;它管理着一组可重用的线程&#xff0c;可以处理分配过来的可并发执行的任务。 线程池设…