Java中使用事务(注解实现)

article/2025/10/3 3:26:12

Java中使用事务(注解实现)

事务的介绍

描述: 对于一个功能实现或者业务流程,要么全做,要么全不做!
特性: ACID

  1. A - 原子性:执行的最小单位,要么全做,要么全不做。(undo-log保证)
  2. C - 一致性:事务执行前后,数据库中的数据保持一致。(不一致:丢失修改、脏读、不可重复读、幻读)
  3. I - 隔离性:多个并发的事物之间是相互隔离的。
  4. D - 持久性:事务对数据的修改是永久性的。(redo-log保证)

第一步: 引入依赖

<!-- 项目启动依赖 @Service @Component @RestController tomcat等等 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

第二步:Java代码

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;@Service
public class HelperService {@Resourceprivate TaskDao taskDao;@Resourceprivate TaskDetailDao taskDetailDao;// isolation:事务的隔离级别,此处使用后端数据库的默认隔离级别, propagation: 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中(常见)。@Transactional(rollbackFor = Exception.class, isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED)public void test(Task task, TaskDetail taskDetail){taskDao.saveTask(task);int a = 3 / 0;taskDetailDao.saveTaskDetail(taskDetail);}
}

补充事务的传播行为
在这里插入图片描述
常用的事务传播行为: Propagation.REQUIRED或者Propagation.REQUIRES_NEW

补充事务的隔离级别
(1)DEFAULT
  使用数据库设置的隔离级别(默认),由DBA 默认的设置来决定隔离级别。
(2)READ_UNCOMMITTED
  这是事务最低的隔离级别,它充许别外一个事务可以看到这个事务未提交的数据。
  会出现脏读、不可重复读、幻读 (隔离级别最低,并发性能高)。
(3)READ_COMMITTED
  保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。
  可以避免脏读,但会出现不可重复读、幻读问题(锁定正在读取的行)。
(4)REPEATABLE_READ(innodb默认的数据库隔离级别)
  可以防止脏读、不可重复读,但会出幻读(锁定所读取的所有行)。
(5)SERIALIZABLE
  这是花费最高代价但是最可靠的事务隔离级别,事务被处理为顺序执行。
  保证所有的情况不会发生(锁表)。
  
注意:myisam与innodb的区别!

  1. myisam只有表级锁,innodb可以支持表级锁和行级锁(默认行级锁)。
  2. myisam强调查询性能,查询操作比innodb快,但是不提供事务支持。innodb提供事务、外键等高级功能,同时具有事务、回滚、崩溃修复能力。
  3. myisam不支持外键,innodb支持外键。
  4. MVCC支持:仅有innodb支持MVCC,同时MVCC只在READ_COMMITTED和REPEATABLE_READ这两个隔离级别下工作。【MVCC:多版本并发控制,使不同事务的读写操作并发执行,提升系统性能。】

第三部: 启动类增加注解

注意一定要启动类开启注解

// 开启注解
@EnableTransactionManagement

补充:事务失效的常见原因

1、 @Transactional必须作用于public方法之上;
2、 @Transactional注解的属性rollbackFor 配置错误,默认只有RuntimeException才会回滚;
3、 启动类没有添加@EnableTransactionManagement
4、 同一个类中调用事务方法,事务会失效

@Service
public class A{public void test01(){// do somethingtest02();// do something}@Transactional(rollbackFor = Exception.class, isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED)public void test02(){// do something (操作多个表的增删改)}}

5、 异常被捕获了:在事务方法中捕获了异常,事务会失效;
6、 数据库引擎不支持事务;(常见数据库引擎:innodb、bdb支持事务,myisam不支持事务)


http://chatgpt.dhexx.cn/article/VYy6Uw0R.shtml

相关文章

JAVA的事务

要先知道什么是java中的事务? 事务: 一般是指要做的或所做的事情.专业术语是这样说的: 就是代码逻辑上的一组操作,这些操作要么全部成功,要么全部失败!举一个现实生活当中的例子: 1张三账上有2000元&#xff0c;李四账号也有2000元。张三要向李四转账1000元&#xff0c;正常来…

Java中的事务

一、事务概述 1. 什么是事务 事务是指对数据库的一系列的操作序列&#xff0c;数据库应用系统通过事务集来完成对数据的存取操作。 2. 事务的特性&#xff08;ACID原则&#xff09; 原子性&#xff08;Atomicity&#xff09;&#xff1a;一个事务的操作不可分割&#xff0c…

java事务总述

文章目录 一、java事务概述1.1、java事务简述1.2、Java事务的类型1.3、java事务的特性1.4、java事务的隔离级别1.5、spring事务的传播特性1.6、spring支持的事务管理类型 二、java事物使用2.1、XML配置2.2、事务使用方式 一、java事务概述 1.1、java事务简述 1、简介 事务(TR…

Java中的事务及使用

什么是事务&#xff1f; 事务&#xff08;Transaction&#xff09;&#xff0c;一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言&#xff08;如SQL&#xff0c;C或Java&am…

测试用例设计方法---等价类划分法

1 等价类划分法 1.1 定义 是把所有可能输入的数据&#xff0c;即程序的输入域划分策划国内若干部分&#xff08;子集&#xff09;&#xff0c;然后从每一个子集中选取少数具有代表性的数据作为测试用例。方法是一种重要的、常用的黑盒测试用例设计方法。 1.1划分等价类 1&a…

02测试用例设计方法-等价类划分

等价类划分法 1&#xff09;定义 是把所有可能的输入数据,即程序的输入域划分成若干部分&#xff08;子集&#xff09;,然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。使用这一方法时&#xff0c;完全不考虑程序的…

等价类划分用例案例设计

一、加法案例 测试要求&#xff1a;计算1到100的两个整数之和&#xff08;包括1和100&#xff09; 提示&#xff1a;一般是一个框输入正确的值&#xff0c;一个框输入错误的值&#xff0c;没有两个框都输入错误的值&#xff0c;因为更容易确定到底是哪个框出现错误的值&#x…

常见测试用例设计方法1---等价类划分

目录 一&#xff0c;等价类划分概念&#xff1a; 二&#xff0c;有效等价类和无效等价类&#xff1a; 三&#xff0c;划分等价类的标准 四&#xff0c;设计测试用例 五&#xff0c;以QQ密码设定规则为例使用等价类划分编写测试用例 1&#xff0c;分析需求&#xff0c;确定输…

黑盒测试方法|测试用例的设计方法--等价类划分方法

黑盒测试方法–测试用例的设计方法–等价类划分方法 目录 等价类划分方法边界值分析方法错误推测方法因果图方法判定表驱动分析方法正交实验设计方法功能图分析方法场景设计方法 等价类划分方法 一、方法简介 &#xff08;1&#xff09;定义 把所有可能的输入数据,即程序的…

软件测试:等价类划分举例

等价类的设计思路&#xff1a; 根据输入条件&#xff0c;确定等价类&#xff0c;包括有效等价类和无效等价类&#xff0c;建立等价类列表为每个等价类规定一个唯一的编号设计一个测试用例&#xff0c;使其尽可能多地覆盖尚未被覆盖的有效等价类&#xff0c;重复这一步&#xff…

等价类划分法-案例剖析-设计测试用例

目录 等价类划分法概念 有效等价类和无效等价类 等价类设计测试用例步骤 案例1 案例2 案例3 等价类划分法概念 等价类划分法是把所有可能的输入数据&#xff0c;即程序的输入数据集合划分成若干个子集即等价类&#xff0c;然后从每个等价类中选取少量具有代表性的数据作为…

15.3-等价类划分

目录 一、等价类划分的概念 二、使用等价类划分的原因 三、等价类划分的价值 四、相关概念 1、等价类 2、有效等价类 3、无效等价类 五、等价类划分法使用步骤 六、等价类的划分原则 1、原则1 2、原则2 3、原则3 4、原则4 5、原则5 6、原则6 七、测试用例的设计步骤 八、等价类…

软件测试用例设计 (一)等价类划分法

软件测试对于软件的重要性不言而喻&#xff0c;是计算机类学生毕业后的一个重要从业方向之一。 如果要从事软件测试&#xff0c;那么有些必备的技能还是要有的。比如&#xff0c;测试理论、测试工具、测试文档的编制。 今天我们就来看看最最最重要的测试理论&#xff1a;黑盒…

测试用例设计——等价类划分法

一、分析问题 如果我们需要对下面的这个两位数加法器设计测试用例&#xff0c;在测试了1&#xff0b;1&#xff0c;1&#xff0b;2&#xff0c;&#xff08;-1&#xff09;1和&#xff08;-1&#xff09;&#xff0b;2之后&#xff0c;是否有必要测试1&#xff0b;3&#xff0c…

等价类划分法设计用例(超详细)

等价类划分法 等价类&#xff1a; 1、解决了不能穷举测试的问题、控制成本、控制测试用例数量 2、数据值要明确&#xff0c;对文字敏感 3、依据需求将输入划分为若干个等价类&#xff0c;划分等价类&#xff08;需求、数据特征&#xff09; 等价类设计用例的难点&#xff1a;…

测试用例设计方法 之【等价类划分法】

前言&#xff1a; 在没有测试用例之前&#xff0c;团队里的成员进行测试时&#xff0c;完全“以人为本”&#xff0c;根据个人思路、需求理解度、发散性思想来完成测试系统&#xff0c;人无完人&#xff0c;弊端显而易见。衍生出【测试用例】后&#xff0c;测试工作的目标得到…

等价类划分法测试用例设计举例

一、基本概念 等价类是指程序输入域的子集。 等价类划分&#xff08;Equivalance Partitioning&#xff09;测试的思想&#xff1a;将程序的输入域划分为若干个区域&#xff08;等价类&#xff09;&#xff0c;并在每个等价类中选择一个具有代表性的元素生成测试用例。该方法…

等价类划分测试用例设计方法

一.方法简介 1.定义 是把所有可能的输入数据,即程序的输入域划分成若干部分&#xff08;子集&#xff09;,然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。 2.划分等价类 等价类是指某个输入域的子集合。在该子集合…

编写测试用例方法之等价类划分法

今天我们再来介绍另外一个编写测试用例的方法&#xff1a;等价类划分法&#xff0c;这个方法是最常用的写用例的方法。话不多说&#xff0c;开始整干货&#xff0c;首先&#xff0c;全图镇楼。 之前我们是如何测试一个商品的呢&#xff1f;产品就是要有它的测试点。测试点之前也…

等价类划分法设计测试用例

等价类划分法&#xff1a; 一、方法简介 1.定义 是把所有可能输入的数据&#xff0c;即程序的输入域划分策划国内若干部分&#xff08;子集&#xff09;&#xff0c;然后从每一个子集中选取少数具有代表性的数据作为测试用例。方法是一种重要的、常用的黑盒测试用例设计方法…