一、事务的概念
1.Spring事务的原理图:
2.事务的作用:保证数据一致性,保证一组Dao操作能够一起成功,一起失败。
(1)事务应用在哪一层? Service业务层
(2)事务控制的方式?
JDBC:Connection.setAutoCommit(false); //设置手动提交
Connection.commit(); //提交
Connection.rollback();//回滚
3.Spring的事务管理有两种方式:
(1)声明式事务管理(重点)
在配置文件中配置属性声明,基于AOP方式实现事务操作,也是将事务管理作为一个切面,织入到目标方法实现事务的管理;
(2)编程式事务管理
自己编写管理事务方式,即进行提交和异常回滚等操作,只有少数业务操作时适合;
4.声明式事务管理
事务划分为额外功能,对于spring而言,把额外功能添加给核心方法,需要使用AOP中的动态代理。
开发步骤:I.创建原始类
II.配置原始类的相关信息
III.书写额外功能(事务--spring)
IV.配置额外功能类的相关信息
V.定义切点
VI.组装切面
5.Spring的事务属性
隔离属性、传播、只读、超时、异常属性
(1) 隔离属性 isolation
a、脏读:一个事务读取了另一个事务尚未提交的数据
b、重复读
c、幻影读
默认值:default 使用数据库默认的隔离属性
MySQL数据库:REPEATABLE_READ (行锁)
Oracle数据库:READ_COMITTED(列锁)
安全性:表锁>行锁>列锁
性能:列锁>行锁>表锁、
(2)传播属性 propagation
作用:事务嵌套问题
propagation=”REQUIRED” 默认值 当外层有事务则融合到新的事务中,外部没有事务则开启新的事务 (适用于增删改)
propagation=”SUPPORTS” 当外层有事务则融合到新的事务中,外部没有事务则不开启新的事务 (适用于查,提高查询效率)
(3)只读属性 readonly
readonly: false默认
true (查询时可以提高查询效率)
(4)超时属性 timeout
作用:当该数据被占用时,指定等待时长
默认值:-1 根据数据库的超时属性默认值
(5)异常属性
rollback-for :可以指定回滚的异常
no-rollback-for:可以指定提交的异常
默认会对RunTimeException及其子类进行回滚,会对非RunTimeException进行提交。
增删改:全用默认值 isolation=”default”
propagation=”REQUIRED”
readonly=”false” timeout=”-1”
查询:propagation=”SUPPORTS” readonly=”true” 提高查询效率