前言
本篇内容示例基于Spring5。
主要内容
一、事务概念
二、事务特性
三、事务操作
展开说说
一、事务概念
事务是操作数据库最基本单元,逻辑上一组操作,要么都成功,要么都失败。
典型场景:银行转账。
二、事务特性
1、原子性
2、一致性
3、隔离性
4、持久性
三、事务操作
1、搭建事务操作环境
①创建service :业务操作,创建转账的方法,调用dao对应的方法。
②创建dao:数据库操作,不写业务,创建两个方法。
③service注入dao,dao注入JdbcTemplate,JdbcTemplate注入DataSource。
2、Spring事务管理介绍
(1)事务添加到JavaEE三层结构service层。(业务逻辑层)
(2)用Spring进行事务管理操作,有两种方式:
①编程式事务管理
②声明式事务管理(使用)
(3)声明式事务管理(底层AOP原理)
①基于注解方式
②基于XML配置方式
(4)Spring事务管理API
提供一个接口,代表事务管理器,这个接口针对不同的框架提供不同的实现类。
3、注解声明式事务管理(重点)
(1)在Spring配置文件中,配置事务管理器。
(2)在Spring配置文件中,开启事务注解。
(3)在service类上面,或者servicel类里面的方法上面,添加事务注解。
① @Transactional 可以添加到类上面,也可以添加到方法上面;
② 如果添加到类上面,就为这个类里面所有的方法都添加事务;
③ 如果添加到方法上面,就为这个方法添加事务;
(4)参数配置
①propagation :事务传播行为(当一个事务方法被另一个事务方法调用的时候,这个方法如何进行?)
②ioslation:事务隔离级别
问题描述:事务有特性称为隔离性,多事务操作之间不会产生影响,不考虑隔离性会有很多问题,其中有3个读问题:
脏读:一个未提交事务读取到了另一个未提交事务的数据;
不可重复读:一个未提交事务读取到了另一提交修改数据;
幻读:一个未提交事务读到了另一提交事务添加数据;
解决方案:通过设置事务隔离解决解决读问题。
READ UNCOMMITTED (读未提交):脏读,不可重复读,幻读;
READ COMMITTED(读已提交):幻读,不可重复读;
REPEATABLE (可重复读):幻读,MySQL默认隔离级别;
③timeout:超时时间
事务需要在一定时间内进行提交,如果不提交就进行回滚,默认值是-1(不超时),设置时间以秒为单位进行计算。
④readOnly:是否只读 (实际项目中经常使用)
读:查询操作
写:添加修改操作
readOnly 默认值为false,表示可以查询,也可以添加删除修改操作,设置readOnly值为true,只能查询。
⑤rollback:回滚
设置哪些异常进行事务回滚
⑥norollback : 不回滚
设置哪些异常不进行事务回滚
4、xml声明式事务管理
在Spring配置文件中进行配置
第一步:配置事务管理器
第二步:配置通知
第三步:配置切入点和切面
5、完全注解声明式事务管理
创建配置类,使用配置类替代xml配置文件