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  {
	@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中注释,主动抛出异常
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


总结

回到顶部

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二、ClickHouse简介

ClickHouse简介 前言一、行式存储二、DBMS功能三、多样化引擎四、高吞吐写入能力五、数据分区与线程级并行六、场景七、特定版本 前言 ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库(DBMS),使用 C 语言编写,主要…

C++线程浅谈

本篇文章我们来介绍一下C 多进程 多线程的技术 1.为什要学习多线程 多进程 提高程序的性能:进程和线程可以使程序并发执行,从而充分利用计算机的多核处理器和资源,提高程序的执行效率和吞吐量。 实现复杂任务:通过将任务划分为多…

Acwing---842.排列数字

排列数字 1.题目2.基本思想3.代码实现 1.题目 给定一个整数 n,将数字 1∼n排成一排,将会有很多种排列方法。 现在,请你按照字典序将所有的排列方法输出。 输入格式 共一行,包含一个整数 n。 输出格式 按字典序输出所有排列方案…

Java安全 URLDNS链分析

Java安全 URLDNS链分析 什么是URLDNS链URLDNS链分析调用链路HashMap类分析URL类分析 exp编写思路整理初步expexp改进最终exp 什么是URLDNS链 URLDNS链是Java安全中比较简单的一条利用链,无需使用任何第三方库,全依靠Java内置的一些类实现,但…

读千脑智能笔记12_阻止人类灭绝

1. 阻止人类灭绝 1.1. 宇宙中唯一知道这些的物体,唯一知道宇宙存在的物体,是我们的大脑 1.2. 如果没有关于某个事物的知识,我们能说这个事物就一定存在吗? 1.2.1. 我们的大脑扮演着这样一个独特的角色,这很令人着迷…

使用matplotlib库在Python中绘制散点图

使用matplotlib库在Python中绘制散点图,展示了两个月份的气温变化。 # coding: utf-8 from matplotlib import pyplot as plt # 导入matplotlib库中的pyplot模块,并重命名为plt from matplotlib import font_manager # 导入font_manager模块&#xff…

代码随想录刷题笔记 DAY 23 | 修剪二叉搜索树 No.669 | 将有序数组转换为二叉搜索树 No.108 | 把二叉搜索树转换为累加树 No.538

文章目录 Day 2301. 修剪二叉搜索树(No. 669)1.1 题目1.2 笔记1.3 代码 02. 将有序数组转换为二叉搜索树(No. 108)2.1 题目2.2 笔记2.3 代码 03. 把二叉搜索树转换为累加树(No. 538)3.1 题目3.2 笔记3.3 代…

Linux_进程地址空间

我们用c语言写的程序,经过编译后形成可执行程序存放在硬盘。当运行该程序时,操作系统将该程序加载到内存中,创建进程控制块,变为进程,然后开始执行该程序。大家是否想过,操作系统是如何加载的呢&#xff1b…

有状态DHCPv6快速模式配置及EUI-64介绍

正文共:1024 字 15 图,预估阅读时间:3 分钟 我们现在已经熟悉了IPv6的地址架构(IPv6地址架构一本通),掌握了IPv6地址的手工配置方式(IPv6从入门到精通)和DHCPv6有状态地址配置&#…

01.数据结构篇-链表

1.找出两个链表的交点 160. Intersection of Two Linked Lists (Easy) Leetcode / 力扣 例如以下示例中 A 和 B 两个链表相交于 c1: A: a1 → a2↘c1 → c2 → c3↗ B: b1 → b2 → b3 但是不会出现以下相交的情况,因为每个节点只有一个…

Peter算法小课堂—区间模型(2)

上次咋们讲了前两个区间模型:1.最大不重叠区间数 2.不重叠区间最少分组数。今天我们就学习:最小区间覆盖问题、区间重叠最厚层数! 最小区间覆盖 先看三道题 那么,第1题,它是浮点数的题,也就要求首尾相同。…

通过增加缓存优化斐波那契递归的冗余计算

一、python 斐波那契数列的递归实现存在大量的冗余计算。例如,为了计算fib(n),我们需要计算fib(n-1)和fib(n-2),但是在计算fib(n-1)的过程中,我们又会重复计算fib(n-2)。当n的值很大时,这种冗余计算会消耗大量的计算资…

机器学习:ROC曲线笔记

ROC曲线(Receiver Operating Characteristic Curve)是一种用于评估二分类模型性能的图形化工具,主要用于展示在不同阈值(Threshold)下模型的真阳性率(True Positive Rate,TPR)和假阳…

最新在线看4K高清电影网站推荐

随着互联网技术的发展,观看高清电影已经不再是难事。这里我为大家分享几个最新的在线看4K高清电影网站,让您在家就能享受到极致观影体验。 通过下面这个即可 1. 【超清影视】 【超清影视】是国内新兴的4K高清电影网站,拥有海量的影片资源&a…

【送书福利-第三十一期】《区块链安全理论与实践(安全技术经典译丛)》

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号:程序员洲洲。 🎈 本文专栏:本文…

幻兽帕鲁游戏官方更新了版本,联机时提示版本不适用,无法加入,怎么办?

如果你在登录游戏的时候提示:您正在尝试加入的比赛正在运行不兼容的游戏版本。请尝试升级游戏版本。此时就说明你需要更新部署在服务器内的幻兽帕鲁了。 1、如果你使用幻兽帕鲁应用模板部署游戏,那么可以选择使用游戏配置面板一键更新。 2、如果你使用一…

使用Xcode 真机无线调试

1.iPhone和Xcode连在同一WIFI下 2.打开Xcode 顶部菜单 选中Window -> Device and Simulators 3.选中Connect via network (注意:勾选前还要用数据线连接,测试机要设置密码,出弹窗的话要点击信任) 真机设备旁边出现小地球 就代表成功了

【ES】--ES集成热更新自定义词库(字典)

目录 一、问题描述二、具体实施1、Tomcat实现远程扩展字典2、验证生效3、ES配置远程扩展字典4、为何不重启ES能实现热更新 一、问题描述 问题现象: 前面完成了自定义分词器词库集成到ES中。在实际项目中词库是时刻在变更的,但又不希望重启ES,对此我们应…

书生·浦语大模型第四课作业

基础作业: 构建数据集,使用 XTuner 微调 InternLM-Chat-7B 模型, 让模型学习到它是你的智能小助手,效果如下图所示,本作业训练出来的模型的输出需要将不要葱姜蒜大佬替换成自己名字或昵称! 1.安装 # 如果你是在 Int…

备战蓝桥杯---组合数学基础1

让我们来几道高中的组合题吧: 1.我们一定有n个向下,为 2.我们挑最大的两个,条件是他们奇偶性相同,为2*A10,2; 3.用捆绑法即可。 4.我们用隔板法,为 5.问题等价于23个相同的球放到3个盒子里,每个盒子至少…