01 事务
事务是一组原子操作单元,要么全部执行成功,要么撤销不执行。
一、事务概念
1.1 数据库中的事物
数据库事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性 (isolation)和持久性(durability)的缩写。
事务的原子性:表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。
事务的一致性:表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。
事务的隔离性:表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。
事务的持久性:表示已提交的数据在事务执行失败时,数据的状态都应该正确。
1.2 JAVA中的事物
一个Java应用系统,如果要操作数据库,则通过JDBC来实现的。增加、修改、删除都是通过相应方法间接来实现的,事务的控制也相应转移到Java程序代码中。 因此,数据库操作的事务 习惯上就称为Java事务。
Spring事务管理分为编程式和声明式:
- 编程式:通过编码实现事务。
- 声明式:基于AOP,将具体业务逻辑与事务处理解耦,使业务代码不受污染。声明式有两种方式:一种是在配置文件xml中做相关的事务规则声明。另一种是基于@Transactional注解。
二、JAVA中事务使用
2.1 注解@Transactional(✅)
在SpringBoot中,在业务层添加事务注解(@Transactional )即可快速开启事务,但是最小粒度只能用到方法上。
1、异常类型不正确
默认情况下,RuntimeException和Error的情况下,spring事务才会回滚,否则事务不会回滚。
也可以自定义回滚的异常类型:@Transactional(rollbackFor = {异常类型列表})
5、外部调用方法没有事务
同一类中的两个方法A和B,方法A没有声明注解事务,而B方法有,A调用本类的方法B(不论方法B是用public还是private修饰),方法B的事务是不会起作用的 原因。
解决:调用方法A上也添加注解。
注:不同类中调用不用加注解,是可以生效的。
参考资料
@Transactional注解配置事务管理(注解的使用)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本