当前位置: 首页 > backend >正文

Spring事务简单操作

什么是事务?

事务是一组操作的集合,是一个不可分割的操作

事务会把所有的操作作为⼀个整体, ⼀起向数据库提交或者是撤销操作请求. 所以这组操作要么同时

成功, 要么同时失败.

事务的操作

分为三步:

1. 开启事start transaction/ begin (⼀组操作前开启事务)

2. 提交事务: commit (这组操作全部成功, 提交事务)

3. 回滚事务: rollback (这组操作中间任何⼀个操作出现异常, 回滚事务)
 

Spring中事务的实现

Spring 中的事务操作分为两类:

1. 编程式事务(⼿动写代码操作事务)

2. 声明式事务(利⽤注解⾃动开启和提交事务

声明式事务

在需要事务的⽅法上添加 @Transactional 注解就可以实现了. ⽆需⼿动开启事务和提交事务, 进入

⽅法时⾃动开启事务, ⽅法执⾏完会⾃动提交事务, 如果中途发⽣了没有处理的异常会⾃动回滚事务

@Transactional成功 

我们先建立一个数据库表

当我们插入数据时,带上@Transactional注解,如果成功就会自动提交,如果错误就会回滚

结果如下

这里很明显,我们的数据已经插入成功了

@Transactional异常

当我们的数据异常的时候,就会触发回滚

结果如下:

上部分代码显示插入成功,但是下面因为有错误就造成了回滚,没有提示有commit

我们查看数据库表,因为回滚,所以是没有数据插入的

@Transactional捕获异常

上述代码中,如果有错误就会产生回滚,导致数据插入不进去,我们可以捕获异常进行处理的方法,使数据插入成功

结果如下:

可以看到这次数据插入成功了,提示有commit

我们查看数据库表,发现捕获异常后就可以使数据插入成功

@Transactional捕获异常怎么回滚

当我们捕获异常,数据就会插入成功,但是我们在捕获异常后,怎么再次回滚呢?

两个方法:

1、重新抛出异常

当我们捕获异常后不处理,再次抛一个异常出去后,就会产生回滚

2、手动回滚业务

当我们捕获异常后,想要产生回滚,我们也可以手动回滚事务

http://www.xdnf.cn/news/7790.html

相关文章:

  • 【低代码】如何使用明道云调用 Flask 视图函数并传参(POST 方法实践)
  • vue-cli 构建打包优化(JeecgBoot-Vue2 配置优化篇)
  • Hadoop-HA高可用集群启动nameNode莫名挂掉,排错解决
  • digitalworld.local: FALL靶场
  • Mysql-数据闪回工具MyFlash
  • SQL查询, 响应体临时字段报: Unknown column ‘data_json_map‘ in ‘field list‘
  • leetcode 92. Reverse Linked List II
  • 张 Prompt Tuning--中文数据准确率提升:理性与冲动识别新突破
  • 分类算法 Kmeans、KNN、Meanshift 实战
  • maven之pom.xml
  • 【25软考网工】第七章(3) UOS Linux防火墙配置和Web应用服务配置
  • OpenHarmony外设驱动使用 (九),Pin_auth
  • 国产化Excel处理组件Spire.XLS for .NET系列教程:通过 C# 将 TXT 文本转换为 Excel 表格
  • 物业后勤小程序源码介绍
  • 【项目记录】准备工作及查询部门
  • python-leetcode 71.每日温度
  • Vue 3.0中核心的Composition API
  • 打造一个支持MySQL查询的MCP同步插件:Java实现
  • PCB智能报价系统——————仙盟创梦IDE
  • Python实例题:PyOt实现简易浏览器
  • leetcode字符串篇【公共前缀】:14-最长公共前缀
  • C语言-9.指针
  • “交互式“ PDF 与“静态“ PDF 表单的区别
  • liinux系统安装Helm
  • 系统数据对接-从获取到处理的全流程
  • PH热榜 | 2025-05-20
  • Ubuntu24.04安装Dify
  • YOLO中model.predict方法返回内容Results详解
  • 智能笔记助手-NotepadAI使用指南
  • 【大模型面试每日一题】Day 24:假设训练资源有限,如何在模型参数量、训练数据量和训练时长三者间做权衡?