TransactionTemplate的使用【事务】

1.1 事务

spring给我们提供了编程式事务以及声明式两种事务。比如我们日常写的基于XML配置的事务管理以及基于注解的方式都是一个声明式事务,但是有很多同学在使用注解方式的时候会出现很多时候事务不生效的问题,可能是同学没有完全理解到其中的原理。这篇文章主要是教会大家使用编程式事务,介绍TransactionTemplate类。

1.2 TransactionTemplate介绍

TransactionTemplate是Spring框架中用于编程式事务管理的一个类。编程式事务管理需要开发者手动编写代码来管理事务的边界,包括开始事务、提交事务和回滚事务等。而TransactionTemplate则提供了一种简化编程式事务管理的方式。

TransactionTemplate是一个线程安全的类,可以在多个业务方法中使用。它使用回调机制,将事务管理的代码与业务逻辑代码分离,使得业务代码更加清晰和易于维护。开发者只需关注业务逻辑的实现,而无需关心事务管理的具体细节。

1.3 TransactionTemplate使用

主要介绍在同一个类当中进行使用,也解决了使用注解等需要新建一个service类进行代理处理等

@Service
@Slf4j
public class TransTest {@Resourceprivate CopperProductionYcleEdgerMapper mapper;@Resourceprivate TransactionTemplate transactionTemplate;public void save() {transactionTemplate.execute((status) -> {try {saveData();deleteData();} catch (Exception e) {status.setRollbackOnly();return false;}return true;});}public void deleteData() {mapper.delete(new LambdaQueryWrapper<CopperProductionYcleEdger>().eq(CopperProductionYcleEdger::getPeriod, "3333"));
//        int a = 1 / 0;}public void saveData() {CopperProductionYcleEdger edger = new CopperProductionYcleEdger();edger.setPeriod("3333");edger.setCurrentMonth(1);edger.setName("2222");edger.setBatchNo("1111");mapper.insert(edger);int a = 1 / 0;CopperProductionYcleEdger edger1 = new CopperProductionYcleEdger();edger1.setPeriod("4444");edger1.setCurrentMonth(2);edger1.setName("5555");edger1.setBatchNo("6666");mapper.insert(edger1);
//        int a = 1 / 0;}}

这个类主要是在我们日常进行开发时,在一个类当中进行多个方法的处理,总体是一个事务进行控制处理。

1.4 总结

TransactionTemplate还提供了其他一些有用的方法,如setPropagationBehavior()、setIsolationLevel()等,用于设置事务的传播行为和隔离级别等属性。这些方法使得开发者可以更加灵活地控制事务的行为。

总之,TransactionTemplate是Spring框架中一种强大的编程式事务管理工具,它简化了事务管理的复杂性,提高了代码的可读性和可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/718913.shtml

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

相关文章

微信小程序开发学习笔记《19》uni-app框架-配置小程序分包与轮播图跳转

微信小程序开发学习笔记《19》uni-app框架-配置小程序分包与轮播图跳转 博主正在学习微信小程序开发&#xff0c;希望记录自己学习过程同时与广大网友共同学习讨论。建议仔细阅读uni-app对应官方文档 一、配置小程序分包 分包可以减少小程序首次启动时的加载时间 为此&#…

YOLOV5学习

【目标检测】yolov5模型详解-CSDN博客

如何使用生成式人工智能探索视频博客的魅力?

视频博客&#xff0c;尤其是关于旅游的视频博客&#xff0c;为观众提供了一种全新的探索世界的方式。通过图像和声音的结合&#xff0c;观众可以身临其境地体验到旅行的乐趣和发现的喜悦。而对于内容创作者来说&#xff0c;旅游视频博客不仅能分享他们的旅行故事&#xff0c;还…

模拟算法题练习(一)(扫雷,灌溉,回文日期)

目录 模拟算法介绍&#xff1a; &#xff08;一、扫雷&#xff09; &#xff08;二、灌溉&#xff09; &#xff08;三、回文日期&#xff09; 有一说一这题大佬的题解是真的强 模拟算法介绍&#xff1a; 模拟算法通过模拟实际情况来解决问题&#xff0c;一般容易理解但是实…

算法基本思想(结尾附上记忆口诀)

算法基本思想(结尾附上记忆口诀) 贪心分治枚举动态回溯递归&#xff08;兄弟思想-递推&#xff09; 这篇文章说的这些思想网上一大堆,可以不看。直接关注结尾自创口诀&#xff0c;希望给你提供一点帮助。 递归 概述 在计算机科学中是指一种通过重复将问题分解为同类的子问…

信息检索技术如何改变了人们获取知识的方式?

第一个肯定是改变了获取信息的渠道&#xff0c;以前需要到图书馆&#xff0c;书籍&#xff0c;报纸&#xff0c;杂志等方式获取信息&#xff0c;现在只需要通过上网搜索一下&#xff0c;就能获取到信息&#xff0c;并且比自己查的更广泛全面。当然&#xff0c;互联网业带来了海…

贪心刷题1-部分背包

题目来源&#xff1a;【深基12.例1】部分背包问题 - 洛谷 参考书目&#xff1a;《深入浅出程序设计竞赛&#xff08;基础篇&#xff09;》 解题思路&#xff1a;这道题是部分背包&#xff0c;如果金币不能完整的放入是可以分割的。题目中有若干堆金币&#xff0c;每堆金币有一…

mac电脑使用pyinstaller打包python脚本

pyinstaller -F template.py 出现报错"AssertionError: Executable contains code signature!" 移除签名 codesign --remove-signature /Users/f7692281/PycharmProjects/TPtestlist/transmit_v6.0.py 打包命令 pyinstaller --windowed transmit_v6.0.py pyinst…

【js】事件循环之promise的async/await与setTimeout

什么是事件循环 事件循环又叫消息循环&#xff0c;是浏览器渲染主线程的工作方式。 浏览器开启一个永不停止的for循环&#xff0c;每次循环都会从消息队列中取任务&#xff0c;其他线程只需要在合适的时候将任务加入到消息队列的末尾。 过去分为宏任务和微任务&#xff0c;现…

wordpress模板官网

移民wordpress主题 移民代办wordpress主题&#xff0c;适合做海外移民咨询的代理公司搭建wordpress企业官方网站使用。 https://www.jianzhanpress.com/?p5130 夏令营wordpress主题 绿色夏令营wordpress主题&#xff0c;适合做夏令营或户外拓展的公司搭建wordpress官方网站…

D2587A高压大电流DC-DC——专为反激式、升压和正向转换器应用而设计的单片集成电路

1、概述 D2587A稳压器是专为反激式、升压和正向转换器应用而设计的单片集成电路。该器件提供四种不同的输出电压版本&#xff1a;3.3V、5V、12V 和可调节电压。这些稳压器需要的外部元器件很少&#xff0c;因此具有成本效益&#xff0c;并且易于使用。该电源开关是一款5A NPN器…

面试经典150题——最小栈

​Life is a journey, theres no right or wrong. 1. 题目描述 2. 题目分析与解析 2.1 思路一 看到题目的一瞬间&#xff0c;有没有注意到 常数时间内检索到最小元素的栈&#xff0c;那说明我们肯定需要把最小元素的下标存储起来&#xff0c;这样才能在常数时间内找到。 其…

网工学习 DHCP配置-接口模式

网工学习 DHCP配置-接口模式 学习DHCP总是看到&#xff0c;接口模式、全局模式、中继模式。理解起来也不困难&#xff0c;但是自己动手操作起来全是问号。跟着老师视频配置啥问题没有&#xff0c;自己组建网络环境配置就是不通&#xff0c;悲催。今天总结一下我学习接口模式的…

c++动态获取工作路径

最近在写项目时遇到一个问题 pclrobot:~/cProject/projects/myPro/mpRPC$ ls autobuild.sh bin build CMakeLists.txt conf example lib log README.md src test如上所示&#xff0c;我的项目根目录里有一个log文件夹和一个bin文件夹&#xff0c;我的需求是 bin目录…

揭秘8.4k星开发者的秘密武器:it-tools在线工具集,你不可不知!

在IT的世界里&#xff0c;为了更好地发挥自己的才能&#xff0c;必须善用优秀的工具。深入挖掘IT-Tools的神奇力量&#xff0c;让你的工作像魔法一般变得轻松高效&#xff01;无论是自动化、监控还是问题解决&#xff0c;这些工具是我们事业成功的关键利器。选择合适的IT工具&a…

PlantUML - 时序图

时序图主要内容 下面是一个简单的时序图&#xff0c;我们可以很容易并且美观的表达我们的交互流程&#xff0c;只需要在箭头的两边指定一个名字&#xff0c;加上描述即可&#xff1a; startuml bkloanapply -> bkloanapprove : request bkloanapprove --> bkloanapply :…

C++ map用法

int main() {void *p;str *st;st (str*)malloc(sizeof(str));st->a 23;st->b 24;p st;//使用void指针需强制类型转换printf("%d\n%d\n",((str*)p)->a, ((str*)p)->b);free(st);map<char, int> mpci;mpci[m] 20;mpci.insert(pair<char, int…

#WEB前端(盒子模型)

1.实验&#xff1a;盒子 2.IDE&#xff1a;VSCODE 3.记录&#xff1a; margin&#xff08;外边距&#xff09; border&#xff08;边框&#xff09; padding&#xff08;内边距&#xff09; 4.代码&#xff1a; <!DOCTYPE html> <html lang"en"> &…

【C++】类与对象(static、explicit、友元、隐式类型转换、内部类、匿名对象)

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343&#x1f525; 系列专栏&#xff1a;http://t.csdnimg.cn/eCa5z 目录 再谈构造函数 初始化列表 隐式类型转换 explicit关键字 static成员 概念 计算程序中创建出了多少个类…

开源软件的商业模式探析:开放与盈利的平衡

写在开头 开源软件的概念和应用已经成为了现代科技领域中的一个重要组成部分。然而&#xff0c;虽然开源软件的价值和影响力得到了广泛认可&#xff0c;但如何在开放的环境中找到商业盈利的平衡却是一个颇具挑战性的问题。本文将深入探讨开源软件的商业模式&#xff0c;从基本…