Spring5快乐教程(十二)Spring事务管理
一、概念和准备工作
什么是事务
定义:事务是数据库操作最基本的单元,逻辑上的一组操作,要么都成功,如果有一个操作失败则所有操作都失败。
典型场景:银行转账
- 阿肥转账100闷给阿靓
- 阿肥:-100 阿靓+100
事务的四个特性(ACID)
- 原子性:操作不可分割,要么都成功,一个失败则所有操作都失败。
- 一致性:操作前和操作后的总量不变。
- 隔离性:多事务间操作不会互相影响。
- 持久性:事务提交后,表中数据会发生变化。
搭建基本环境
第一步 系统分析
第二步 建表并写入记录
第三步 创建Service和Dao,并完成对象的注入关系
第四步 在dao层编写多钱和少钱的方法
第五步 编写Service层
第六步 编写测试类
二、事务场景的引入
三、事务管理介绍
PS:事务一般添加到JavaEE三层结构里面的Service层(业务逻辑层)
事务管理的方式:
- 编程式事务管理
- 声明式事务管理【常用】
- 基于注解方式【常用】
- 基于XML方式
PS:在Spring中使用事务管理,底层使用AOP原理。
Spring事务管理API
提供了一个接口PlatformTransactionManager,代表事务管理器,这个接口根据不同的ORM框架提供类不同的实现类,来实现事务操作:
编程式事务管理
PS:详解可以参考这篇文章
声明式事务管理【xml方式】
PS:事务方法配置部分详见这里
声明式事务管理【注解】
第一步 在Spring配置文件中配置事务管理器
第二步 在Spring配置文件中开启事务注解
声明式事务管理【完全注解开发】
四、事务管理相关参数
我们可以在@Transactional,在这个注解里面可以配置事务的相关参数:
- propagation :事务传播行为
- isolation :事务隔离级别
- timeout :超时时间
- readOnly :是否只读
- rollbackFor :回滚
- noRollbackFor :不回滚
事务传播行为
事务传播行为: 多事务方法间进行调用的过程中,事务的管理方式。
事务方法:对数据库表数据进行变化的操作【如增、删、改 PS:查询不算】
事务传播行为分类
例子解析事务传播行为
事务隔离级别
事务隔离级别:事务有一个特性--隔离性,多事务操作之间不会产生影响,如果不考虑隔离性的话,会产生很多问题:
- 脏读
- 不可重复读
- 幻读(虚读)
作用:为了解决上面的3个读的问题而产生。
脏读【致命问题,必须避免】
定义:一个未提交的事务读取到另外一个未提交事务的数据。
可能产生的问题:被读取的事务回滚时,读取到的数据就不对了。
不可重复读【现象,有时不可避免】
定义:一个未提交的事务读取到另外一个已提交事务修改后的数据。【主要针对查询结果】
可能产生的问题:一个事务范围内两个相同的查询却返回了不同数据。
幻读(虚读)
定义:一个未提交的事务读取到另外一个已提交事务添加后的数据。【主要针对查询结果】
可能产生的问题:一个事务范围内统计时可能会有问题。
隔离级别
事务超时时间
定义:事务需要在一定时间内进行提交,如果不提交则进行回滚
默认值:-1【永不超时】
单位:秒
事务是否只读
读:查询操作。
写:添加、修改、删除操作。
默认值:false,表示可以进行查询,也可以进行增删改操作。
readOnly = true:表示只能进行查询操作
事务回滚
设置出现哪些异常进行事务回滚。
事务不回滚
设置出现哪些异常进行事务回滚。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2020-02-05 linux学习(十)linux安装MySQL