当前位置: 首页 > news >正文

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


总结

回到顶部

相关文章:

  • JVM(2)实战篇
  • Redis相关介绍
  • 【PyTorch】改变张量(Tensor)形状操作
  • 2. Maven 继承与聚合
  • 小游戏和GUI编程(4) | 基于 SFML 的黑客帝国字符雨
  • 机器学习3----决策树
  • Android java基础_多态性
  • [ubuntu]split命令分割文件
  • Swift 初见
  • MQTT的学习与应用
  • rtt设备io框架面向对象学习-dac设备
  • Unity下使用Sqlite
  • 开发自定义标记应用程序
  • 2024年远控软件年度盘点:安全、稳定、功能之选
  • 柚见(伙伴匹配系统)第三期
  • 《Java编程思想》读书笔记-对象导论
  • 「译」Node.js Streams 基础
  • 【译】理解JavaScript:new 关键字
  • canvas 高仿 Apple Watch 表盘
  • CEF与代理
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • HTTP请求重发
  • js递归,无限分级树形折叠菜单
  • Laravel 实践之路: 数据库迁移与数据填充
  • Linux CTF 逆向入门
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • underscore源码剖析之整体架构
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 开源地图数据可视化库——mapnik
  • 力扣(LeetCode)965
  • 普通函数和构造函数的区别
  • 微服务框架lagom
  • 微信开放平台全网发布【失败】的几点排查方法
  • 协程
  • PostgreSQL之连接数修改
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (libusb) usb口自动刷新
  • (定时器/计数器)中断系统(详解与使用)
  • (二)hibernate配置管理
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (六)vue-router+UI组件库
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (十) 初识 Docker file
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)linux下的时间函数使用
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .md即markdown文件的基本常用编写语法
  • .Net Winform开发笔记(一)
  • .net 发送邮件
  • .NET 反射的使用
  • .NET 分布式技术比较