java中事务的使用

文章目录

  • 前言
  • 一、同一张表
    • 1.业务代码
    • 2.测试代码
    • 3.测试结果
  • 二、不同表
    • 1.业务代码
    • 2.测试代码
    • 3.测试结果
  • 总结


前言

本文将介绍在springboot中使用@Transactional注解来完成对数据库事务的操作,保证数据一致性。


一、同一张表

1.业务代码

Controller

@Controller
public class StudentInfoController {/*** 相同表之间的事务* @param s1* @param s2* @return*/public int transactional(StudentInfo s1,StudentInfo s2) {return studentInfoService.transactional(s1,s2);}
}

Service

@Service
public class StudentInfoService  {@Autowiredprivate StudentInfoMapper studentInfoMapper;/*** 测试事务*/@Transactionalpublic int transactional(StudentInfo s1,StudentInfo s2) {int count=0;count += studentInfoMapper.insertSelective(s1);
//		if(count==1){
//			throw new RuntimeException("ex");
//		}count += studentInfoMapper.insertSelective(s2);return count;}
}

2.测试代码

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootStart.class)
public class SpringbootStartTest {@Autowiredprivate StudentInfoController studentInfoController;
@Testpublic void test(){transactional();}public void transactional(){StudentInfo s1=new StudentInfo();s1.setId("t1");s1.setName("zs");s1.setIdType("sfz");s1.setIdNumber("100");StudentInfo s2=new StudentInfo();s2.setId("t2");s2.setName("ls");s2.setIdType("sfz");s2.setIdNumber("200");studentInfoController.transactional(s1,s2);System.out.println("success");}
}

3.测试结果

正常情况下,程序处理完成,插入了两条数据没问题
在这里插入图片描述

在这里插入图片描述
接下来,打开service中注释,主动抛出异常
在这里插入图片描述
在这里插入图片描述

二、不同表

1.业务代码

Controller

@Controller
public class StudentInfoController extends BaseController{/*** 不同表之间的事务* @param s1* @param s2* @return*/public int diffTransactional(StudentInfo s1, StudentCurriculum s2) {return studentInfoService.diffTransactional(s1,s2);}
}

Service

@Service
public class StudentInfoService  {@Autowiredprivate StudentInfoMapper studentInfoMapper;@Autowiredprivate StudentCurriculumMapper studentCurriculumMapper;/*** 测试事务*/@Transactionalpublic int diffTransactional(StudentInfo s1, StudentCurriculum s2) {int count=0;count += studentInfoMapper.insertSelective(s1);
//		if(count==1){
//			throw new RuntimeException("ex");
//		}count += studentCurriculumMapper.insertSelective(s2);return count;}
}

2.测试代码

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringbootStart.class)
public class SpringbootStartTest {@Autowiredprivate StudentInfoController studentInfoController;
@Testpublic void test(){diffTransactional();}public void diffTransactional(){StudentInfo s1=new StudentInfo();s1.setId("t3");s1.setName("zs");s1.setIdType("sfz");s1.setIdNumber("100");StudentCurriculum s2=new StudentCurriculum();s2.setId(4);s2.setCurriculumName("1");s2.setTeacher("zjg");studentInfoController.diffTransactional(s1,s2);System.out.println("success");}
}

3.测试结果

正常情况下,程序处理完成,插入了两条数据没问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接下来,打开service中注释,主动抛出异常
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


总结

回到顶部

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

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

相关文章

【Web】CVE-2021-31805 s2-062漏洞复现学习

目录 Struts2介绍 漏洞概况 OGNL与Struts2 简单原理 漏洞复现 正向rce 反弹shell payload分析 Struts2介绍 Struts 2 是一个流行的用于构建 Java Web 应用程序的开源 Web 应用程序框架。它是 Apache 软件基金会下的一个顶级项目,是 Struts 框架的升级版本。…

使用 devc++ 开发 easyx 实现 Direct2D 交互

代码为 codebus 另一先生的 文案 EasyX 的三种绘图抗锯齿方法 - CodeBus 这里移植到 devc 移植操作如下&#xff1a; 调用dev 的链接库方式&#xff1a; project -> project option -> 如图所示 稍作修改的代码。 #include <graphics.h> #include <d2d1.…

计算机的大脑—中央处理单元(CPU)(重点认识运算器和控制器)

计算机的中央处理单元&#xff08;CPU&#xff09;是计算机的主要部件之一&#xff0c;负责解释和执行大部分计算机指令&#xff0c;是计算机的大脑。CPU执行的操作包括算术运算、数据传输和指令的解释执行。现代CPU的性能取决于多种因素&#xff0c;包括其核心数量、时钟速度、…

临睡之际的生死思索与生命哲学的启示

在人类生存体验中&#xff0c;有一种独特而深邃的感受——当人们准备进入梦乡时&#xff0c;会担忧第二天醒来是否还能感知到生命的律动。这种“入睡即未知”的心理状态&#xff0c;既是生命无常的深刻体现&#xff0c;也是对个体生命价值、生活态度及人生哲学的一种深度拷问。…

BUUCTF-Real-[Jupyter]notebook-rce

1、简介 Jupyter Notebook&#xff08;此前被称为 IPython notebook&#xff09;是一个交互式笔记本&#xff0c;支持运行 40 多种编程语言。 如果管理员未为Jupyter Notebook配置密码&#xff0c;将导致未授权访问漏洞&#xff0c;游客可在其中创建一个console并执行任意Pytho…

Android 10.0 锁屏壁纸 LockscreenWallpaper

前言 一、设置壁纸 通过系统设置进行锁屏壁纸和桌面壁纸的设置。 Setting 部分的代码&#xff1a; packages/apps/WallpaperPicker2/src/com/android/wallpaper/module/DefaultWallpaperPersister.java private int setStreamToWallpaperManagerCompat(InputStream inputStre…

第6个-滚动动画

Day 6 - Scroll Animation 1. 演示效果 2. 分析思路 布局 所有的内容进行水平垂直居中&#xff0c;可以使用**margin:0 auto;&#xff0c;也可以使用flex**布局&#xff1a; body {background-color: #efedd6;display: flex;flex-direction: column;justify-content: center…

树结构 严蔚敏 数据结构代码

一&#xff0c;树顺序和链式存储结构的定义 //树用儿子-兄弟表示法&#xff0c;就成了二叉树//一般二叉树用顺序存储浪费空间&#xff0c;所以大都用链式存储//特殊的二叉树有完美 或 满二叉树、完全树 可以用顺序存储//严#define MAXSIZE 100 //二叉树的最大结点数typedef TE…

前端架构: 本地调试脚手架的2种方式

一、 调试简单的脚手架方式 假定脚手架名称是 xxx 1 &#xff09;方式1 在xxx脚手架项目目录的上一级&#xff0c;执行 npm i -g xxx这时候&#xff0c;就可以本地调试脚手架&#xff0c;在前文中已经说明软链的作用参考&#xff1a;https://blog.csdn.net/Tyro_java/article…

【C语言】实现栈

目录 &#xff08;一&#xff09;栈 &#xff08;二&#xff09;头文件 &#xff08;三&#xff09;功能实现 &#xff08;1&#xff09;初始化栈 &#xff08;2&#xff09; 栈的销毁 &#xff08;3&#xff09;压栈 &#xff08;4&#xff09; 出栈 &#xff08;5&a…

【html学习笔记】1.概念

1.概念 1.1 HTML标准格式 <html><body><p>Hello World</p></body> </html>1.2 编辑方式 新建一个笔记本文件&#xff0c;将html语法格式的内容写入。保存后将记事本的.txt后缀换成.html,就可以在浏览器里运行了 1.3 中文问题 为了避…

前端架构: 从vue-cli探究脚手架原理

从使用角度理解什么是脚手架 脚手架本质是一个操作系统的客户端 在终端中去执行一个命令&#xff0c;这个命令本身它就是一个客户端我们其实可以把脚手架理解为操作系统的一个客户端通过命令去执行它的时候&#xff0c;这个命令往往是这样的一个构造&#xff0c;如下 比如&…

PoW算法,请出示你的证明

口信消息型拜占庭问题的解可以防止 (n - 1) / 3 个坏人 (其中 n 为节点数)作恶&#xff0c;这样一来也是可以通过不断增加节点数来突破 (n - 1) / 3 的限制。为了防止这一行为可以使用区块链技术中的工作量证明&#xff08;Proof of Work&#xff09;算法。 原理 PoW算法&…

devc++跑酷小游戏1.2.5

更新了在关卡中的复位和地图的刷新z或Z&#xff0c;存档还是没写出来&#xff0c;文件操作好难&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;…

【leetcode热题100】解码方法

难度&#xff1a; 中等通过率&#xff1a; 21.5%题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目描述 一条包含字母 A-Z 的消息通过以下方式进行了编码&#xff1a; A -> 1 B -> 2 ... Z -> 26给定一个只包含数字…

continue、break、return的区别

continue、break、return的区别 continuebreakreturn continue 作用&#xff1a;跳过本次循环&#xff0c;继续接下来的循环 for(int i 1;i < 10;i){if(i4){continue;}System.out.print(i " "); } //输出结果为&#xff1a;1 2 3 5 6 7 8 9 10 //4的输出被跳过…

C#中 Combine 静态方法

在C#中&#xff0c;Combine是System.IO.Path类的一个静态方法&#xff0c;用于将多个路径片段组合成一个完整的路径。 Combine方法的详细解释如下&#xff1a; public static string Combine(string path1, string path2);参数&#xff1a; path1&#xff1a;要组合的第一个…

【手写数据库toadb】数据字典的内容结构,它的生成,避免鸡生蛋蛋生鸡的问题,高频访下的性能应对

411 数据字典的作用 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方…

【好玩AI】【Prompt】情人节了,用GPT写个【骂醒恋爱脑】的机器人跟自己对话吧

情人节了&#xff0c;让我们用GPT写个【骂醒恋爱脑】的机器人跟自己对话吧。 通过本文&#xff0c;你能学到&#xff1a; 1. 如何零代码搭建一个自己的机器人Bot 2. 骂醒恋爱脑的高级Prompt 通过本文&#xff0c;你还能得到&#xff1a; 恋爱脑可能被骂醒 为了白嫖&#xff0c;…

Linux下的多线程

前面学习了进程、文件等概念&#xff0c;接下里为大家引入线程的概念 多线程 线程是什么&#xff1f;为什么要有线程&#xff1f;线程的优缺点Linux线程操作线程创建线程等待线程终止线程分离 线程间的私有和共享数据理解线程库和线程id深刻理解Linux多线程&#xff08;重点&a…