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.pswp.cn/diannao/83981.shtml

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

相关文章

Rust 学习笔记:关于错误处理的练习题

Rust 学习笔记:关于错误处理的练习题 Rust 学习笔记:关于错误处理的练习题想看到回溯,需要把哪个环境变量设置为 1?以下哪一项不是使用 panic 的好理由?以下哪一项最能描述为什么 File::open 返回的是 Result 而不是 O…

MCP 协议传输机制大变身:抛弃 SSE,投入 Streamable HTTP 的怀抱

在技术的江湖里,变革的浪潮总是一波接着一波。最近,模型上下文协议(MCP)的传输机制就搞出了大动静,决定和传统的服务器发送事件(SSE)说拜拜,转身拥抱 Streamable HTTP,这…

138. Copy List with Random Pointer

目录 题目描述 方法一、使用哈希表 方法二、不使用哈希表 题目描述 问题的关键是,random指针指向的是原链表的结点,这个原链表的结点对应哪一个新链表的结点呢?有两种办法。一是用哈希表。另一种是复制原链表的每一个结点,并将…

如何评估开源商城小程序源码的基础防护能力?

在电商行业快速发展的背景下,开源商城已经为更多企业或者开发者的首选方案,不过并不是所有的开源商城源码都能让人放心使用,今天就带大家一起了解下如何评估开源商城小程序源码的基础防护能力,帮助大家更好地筛选安全性高的商城源…

[Vue]跨组件传值

父子组件传值 详情可以看文章 跨组件传值 Vue 的核⼼是单向数据流。所以在父子组件间传值的时候,数据通常是通过属性从⽗组件向⼦组件,⽽⼦组件通过事件将数据传递回⽗组件。多层嵌套场景⼀般使⽤链式传递的⽅式实现provideinject的⽅式适⽤于需要跨层级…

悠易科技智能体矩阵撬动AI全域营销新时代

大数据产业创新服务媒体 ——聚焦数据 改变商业 在数字化浪潮与AI技术的双重驱动下,数据营销正经历前所未有的变革,从传统的全域智能营销,迈向更具颠覆性的AI全域营销时代。 麦肯锡的报告显示,采用AI驱动营销的企业,客…

Xilinx XCAU10P-2FFVB676I 赛灵思 Artix UltraScale+ FPGA

XCAU10P-2FFVB676I 是 AMD Xilinx 推出的 Artix UltraScale™ FPGA 器件,内部集成了约 96,250 逻辑单元,满足中等规模高性能应用的需求。该芯片采用 16 nm FinFET 制程工艺,核心电压典型值约 0.85 V,能够在较低功耗下提供高达 775…

Java SpringBoot 项目中 Redis 存储 Session 具体实现步骤

目录 一、添加依赖二、配置 Redis三、配置 RedisTemplate四、创建控制器演示 Session 使用五、启动应用并测试六、总结 Java 在 Spring Boot 项目中使用 Redis 来存储 Session,能够实现 Session 的共享和高可用,特别适用于分布式系统环境。以下是具体的实…

分布式电源的配电网无功优化

分布式电源(Distributed Generation, DG)的大规模接入配电网,改变了传统单向潮流模式,导致电压波动、功率因数降低、网损增加等问题,无功优化成为保障配电网安全、经济、高效运行的关键技术。 1. 核心目标 电压稳定性:抑制DG并网点(PCC)及敏感节点的电压越限(如超过5%…

JS手写代码篇---手写Promise

4、手写promise Promise 是一个内置对象,用于处理异步操作。Promise 对象表示一个尚未完成但预期将来会完成的操作。 Promise 的基本结构 一个 Promise 对象通常有以下状态: pending(进行中):初始状态,…

我喜欢的vscode几个插件和主题

主题 Monokaione Monokai Python 语义高光支持 自定义颜色为 self 将 class , def 颜色更改为红色 为装饰器修复奇怪的颜色 适用于魔法功能的椂光 Python One Dark 这个主题只在python中效果最好。 我为我个人使用做了这个主题,但任何人都可以使用它。 插件 1.Pylance Pylanc…

【深度学习新浪潮】大模型时代,我们还需要学习传统机器学习么?

在大模型时代,AI 工程师仍需掌握传统机器学习知识,这不仅是技术互补的需求,更是应对复杂场景和职业发展的关键。以下从必要性和学习路径两方面展开分析: 一、传统机器学习在大模型时代的必要性 技术互补性 大模型(如GPT、BERT)擅长处理复杂语义和生成任务,但在数据量少…

年度工作计划总结述职报告PPT模版一组分享

工作计划总结述职报告PPT模版:工作计划述职报告PPT模版https://pan.quark.cn/s/fba40a5e87da 第一套PPT模版是医院年度工作计划的封面页,有蓝橙配色、医院标题、年度工作计划的大字、英文副标题、汇报人信息和右上角的医院logo区域,右侧还有医…

软件设计师“排序算法”真题考点分析——求三连

一、考点分值占比与趋势分析 综合知识题分值统计表 年份考题数量总分值分值占比考察重点2018222.67%时间复杂度/稳定性判断2019334.00%算法特性对比分析2020222.67%空间复杂度要求2021111.33%算法稳定性判断2022334.00%综合特性应用2023222.67%时间复杂度计算2024222.67%分治…

华为云Flexus+DeepSeek征文|基于华为云Flexus云服务的云服务器单机部署Dify-LLM应用开发平台

目录 一、前言 二、华为云Flexus云服务优势 三、华为云Flexus一键部署Dify 3.1 选择模板 3.2 参数配置 3.3 资源栈设置 3.4 配置确认 3.5 创建执行计划 3.6 部署 四、Dify-LLM应用开发平台初体验 4.1 访问Dify-LLM应用开发平台 4.2 设置管理员账户 4.3 登录Dify-LLM应用开发平台…

智能指针RAII

引入:智能指针的意义是什么? RAll是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。 在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效&#…

nt!MiRemovePageByColor函数分析之脱链和刷新颜色表

第0部分&#xff1a;背景 PFN_NUMBER FASTCALL MiRemoveZeroPage ( IN ULONG Color ) { ASSERT (Color < MmSecondaryColors); Page FreePagesByColor[Color].Flink; if (Page ! MM_EMPTY_LIST) { // // Remove the first entry on the zeroe…

DEBUG:Lombok 失效

DEBUG&#xff1a;Lombok 失效 问题描述 基于 Spring Boot 的项目中&#xff0c;编译时显示找不到 log 属性。查看对应的 class 类&#xff0c;Lombok 正常在编译时生成 log 属性。 同时存在另一个问题&#xff0c;使用Getter注解&#xff0c;但实际使用中该注解并没有生效&…

3D几何建模引擎3D ACIS Modeler核心功能深度解读

3D ACIS Modeler是一款由Spatial Corporation&#xff08;现为Dassault Systmes旗下&#xff09;开发的工业级三维几何建模内核&#xff0c;为CAD/CAM/CAE、建筑、制造、测量及三维动画等领域提供底层建模能力。本文将从基本定位、核心功能及行业案例三方面&#xff0c;系统介绍…

Flutter - 集成三方库:数据库(sqflite)

数据库 $ flutter pub add sqlite $ flutter pub get$ flutter run运行失败&#xff0c;看是编译报错,打开Xcode工程 ⌘ B 编译 对比 GSYGithubAppFlutter 的Xcode工程Build Phases > [CP] Embed Pods Frameworks 有sqfite.framework。本地默认的Flutter工程默认未生成Pod…