java中事务的使用

news2024/11/29 2:34:38

文章目录

  • 前言
  • 一、同一张表
    • 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  {
	@Autowired
	private StudentInfoMapper studentInfoMapper;
	/**
	 * 测试事务
	 */
	@Transactional
	public 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 {
	@Autowired
    private StudentInfoController studentInfoController;
@Test
    public 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  {
	@Autowired
	private StudentInfoMapper studentInfoMapper;
	@Autowired
	private StudentCurriculumMapper studentCurriculumMapper;
	/**
	 * 测试事务
	 */
	@Transactional
	public 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 {
	@Autowired
    private StudentInfoController studentInfoController;
@Test
    public 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.coloradmin.cn/o/1448079.html

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

相关文章

停止内耗,做有用的事

很多读者朋友跟我交流的时候,都以为我有存稿,于是听到我说每周四现写的时候都很惊讶。其实没什么好惊讶的,每周四我都会把自己关在书房里一整天,断掉一切电话、微信、邮件,从中午写到晚上,直到写完为止。 这…

算法学习——LeetCode力扣回溯篇1

算法学习——LeetCode力扣回溯篇1 77. 组合 77. 组合 - 力扣(LeetCode) 描述 任何顺序 返回答案。 示例 示例 1: 输入:n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 示例 2: 输…

springboot743二手交易平台

springboot743二手交易平台 获取源码——》公主号:计算机专业毕设大全

《Java 简易速速上手小册》第8章:Java 性能优化(2024 最新版)

文章目录 8.1 性能评估工具 - 你的性能探测仪8.1.1 基础知识8.1.2 重点案例:使用 VisualVM 监控应用性能8.1.3 拓展案例 1:使用 JProfiler 分析内存泄漏8.1.4 拓展案例 2:使用 Gatling 进行 Web 应用压力测试 8.2 JVM 调优 - 魔法引擎的调校8…

第四篇【传奇开心果微博系列】Python微项目技术点案例示例:美女颜值判官

传奇开心果微博系列 系列微博目录Python微项目技术点案例示例系列 微博目录一、微项目目标二、雏形示例代码三、扩展思路四、添加不同类型的美女示例代码五、增加难度等级示例代码六、添加特殊道具示例代码七、设计关卡系统示例代码八、添加音效和背景音乐示例代码九、多人游戏…

【解决】idea控制台不输出trace/debug日志

idea控制台不输出trace日志 问题原因解决 问题 idea控制台不输出trace日志。 pom文件&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></dependency>输出lo…

23种计模式之Python/Go实现

目录 设计模式what?why?设计模式&#xff1a;设计模式也衍生出了很多的新的种类&#xff0c;不局限于这23种创建类设计模式&#xff08;5种&#xff09;结构类设计模式&#xff08;7种&#xff09;行为类设计模式&#xff08;11种&#xff09; 六大设计原则开闭原则里氏替换原…

P3612 [USACO17JAN] Secret Cow Code S题解

题目 奶牛正在试验秘密代码&#xff0c;并设计了一种方法来创建一个无限长的字符串作为其代码的一部分使用。 给定一个字符串&#xff0c;让后面的字符旋转一次&#xff08;每一次正确的旋转&#xff0c;最后一个字符都会成为新的第一个字符&#xff09;。也就是说&#xff0…

localStorage、sessionStorage、cookie区别

localStorage: localStorage 的生命周期是永久的&#xff0c;关闭页面或浏览器之后 localStorage 中的数据也不会消失。localStorage 除非主动删除数据&#xff0c;否则数据永远不会消失 sessionStorage: sessionStorage 的生命周期是仅在当前会话下有效。sessionStorage 引入…

【STM32 CubeMX】STM32中断体系结构

文章目录 前言一、中断体系的比喻二、中断的内部结构2.1 EXTI触发方式 2.2 NVIC2.3 cpu与中断2.4 外部中断控制器框图上升沿触发选择寄存器屏蔽/使能寄存器等待处理寄存器 2.5 中断优先级 总结 前言 一、中断体系的比喻 STM32中断体系如下图所示&#xff1a; 一座大型建筑物…

(二)【Jmeter】专栏实战项目靶场drupal部署

该专栏后续实战示例&#xff0c;都以该篇部署的项目展开操作。 前置条件 参考“&#xff08;一&#xff09;【Jmeter】JDK及Jmeter的安装部署及简单配置” 安装部署Jmeter&#xff0c;从文章最后下载“Postman、Rancher.ova、VirtualBox-7.0.12-159484-Win.exe、Xshell-7.0.01…

VUE学习——表单的输入绑定

使用【v-model】。 输入框 <template><h1>表单输入绑定</h1><input type"text" v-model"message"><p>输入的值&#xff1a;{{ message }}</p> </template> <script>export default{data(){return{messa…

java 数据结构ArrayList类

目录 什么是List 线性表 顺序表 ArrayList类 ArrayList无参方法 ArrayList有参方法 &#xff1f;通配符 ArrayList 的remove方法 ArrayList 的subList方法 Iterator&#xff1a;迭代器 使用ArrayList完成杨辉三角 什么是List 在集合框架中&#xff0c;List是一个接…

FileZilla Server 1.8.1内网搭建

配置环境服务器服务器下载服务器配置服务器配置 Server - ConfigureServer Listeners - Port 协议设置 Protocols settingsFTP and FTP over TLS(FTPS) Rights management(权利管理)Users(用户) 客户端建立连接 配置环境 服务器处于局域网内: 客户端 < -访问- > 公网 &l…

猫头虎分享已解决Bug || Invariant Violation in React: Element Type is Invalid ‍

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

HarmonyOS鸿蒙学习基础篇 - 自定义组件(一)

前言 在ArkUI中&#xff0c;UI显示的内容均为组件&#xff0c;由框架直接提供的称为系统组件&#xff0c;由开发者定义的称为自定义组件。在进行 UI 界面开发时&#xff0c;通常不是简单的将系统组件进行组合使用&#xff0c;而是需要考虑代码可复用性、业务逻辑与UI分离&#…

987. 二叉树的垂序遍历 - 力扣(LeetCode)

题目描述 给你二叉树的根结点 root &#xff0c;请你设计算法计算二叉树的 垂序遍历 序列。 对位于 (row, col) 的每个结点而言&#xff0c;其左右子结点分别位于 (row 1, col - 1) 和 (row 1, col 1) 。树的根结点位于 (0, 0) 。 二叉树的 垂序遍历 从最左边的列开始直到…

代码随想录算法训练营第46天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

文章目录 198.打家劫舍思路代码 213.打家劫舍II思路代码 337.打家劫舍III思路代码 198.打家劫舍 题目链接&#xff1a;198.打家劫舍 文章讲解&#xff1a;代码随想录|198.打家劫舍 思路 1.dp[i]:从0打劫到i所获得的最高金额 2.是否打劫第i个决定了dp[i]&#xff1a;如果打劫则…

Unity类银河恶魔城学习记录7-4 P70 Improving sword‘s behaviour源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Sword_Skill_Controller.cs using System.Collections; using System.Colle…

浅谈Linux环境

冯诺依曼体系结构&#xff1a; 绝大多数的计算机都遵守冯诺依曼体系结构 在冯诺依曼体系结构下各个硬件相互配合处理数据并反馈结果给用户 其中控制器和运算器统称为中央处理器&#xff08;CPU&#xff09;&#xff0c;是计算机硬件中最核心的部分&#xff0c;像人类的大脑操控…