目录
1.什么是事务
2.事务的特性ACID
3.Spring 管理事务的方式
4.Spring管理事务的体现:JDBCTemplate
5.声明式事务的属性有哪些
6.声明式事务属性---只读
7.声明式事务属性---超时
8.声明式事务属性---回滚策略
9.声明式事务属性---事务隔离级别
10.声明式事务属性---事务传播行为
1.什么是事务
概念:事务就是一种SQL语句执行的缓存机制,不会单条执行完毕就更新数据库数据,最终根据缓存内的多条语句执行结果统一判定:
所有执行结果判定成功:触发commit提交事务来结束事务,更新数据
任意一个执行结果失败:触发rollback回滚结束事务
优势:允许在失败情况下,数据回到业务之前的状态
2.事务的特性ACID
Atomicity-原子性:事务是一个不可分割的工作单位,事务中的操作要么都执行,要么都不执行
Consistency-一致性:事务必须使数据库从一个一致性状态变换到另外一个一致性状态
Isolation-隔离性:事务的隔离性指事务并发执行时,不会被其他事务干扰
Durability-持久性:一个事务一旦被提交,它对数据库数据的改变就是永久性的
3.Spring 管理事务的方式
编程式事务:将业务逻辑一层一层全部代码实现,通常是使用TransactionTemplate手动管理事务,应用很少
声明式事务:使用xml配置文件或者基于注解管理事务,即使用AOP管理事务;提高了开发效率,能够优化性能
4.Spring管理事务的体现:JDBCTemplate
1.JDBCTemplate的位置:是Spring封装JDBC后形成的框架---SpringJDBC的一个类
2.为什么需要JDBCTemplate:JDBCTemplate中有各种对数据库增删改查的方法,方便操作数据库
5.声明式事务的属性有哪些
1.属性有:只读、超时、回滚策略、事务隔离级别、事务传播行为
2.设置方式:使用@Transaction注解,设置相对应的属性
6.声明式事务属性---只读
1.设置只读:
@Transactional(
readOnly = true
)
2.作用:对于一个设置为只读的查询操作,数据库就知道该操作不涉及写操作,从而针对性优化
7.声明式事务属性---超时
1.设置超时:
@Transactional(
timeout = 3
)
2.作用:在XXXs时间内未执行完毕就强制回滚;
8.声明式事务属性---回滚策略
1.设置回滚
@Transactional(
rollbackFor = Exception.class
rollbackForClassName = java.lang.Exception
noRollbackFor = Exception.class
noRollbackForClassName = java.lang.Exception
)
2. 回滚策略的四个属性:
因为…而回滚:
rollbackFor属性:需要设置一个Class类型的对象
rollbackForClassName属性:需要设置一个字符串类型的全类名
不因为…而回滚:
noRollbackFor属性:需要设置一个Class类型的对象
noRollbackForClassName属性:需要设置一个字符串类型的全类名
3.作用:以下列代码为例:
@Transactional(
noRollbackForClassName = java.lang.Exception
)
该代码的意思是:在事务执行的过程中,即使发生了Exception也不会发生回滚,事务正常执行
9.声明式事务属性---事务隔离级别
1.设置隔离级别为默认级别(在mysql中为可重复读)
@Transactional(
isolation = Isolation.DEFAULT
)
2.什么是隔离级别:事务与其他事务的隔离程度;隔离级别越高,数据一致性越好,并发性越弱
3.隔离级别有几种:
从低到高为:读未提交、读已提交、可重复读(默认)、串行化
4.不同的隔离级别产生的脏读、不可重复读、幻读情况
10.声明式事务属性---事务传播行为
1.设置事务传播行为:表示不管当前线程上是否有已经开启的事务,都要开启新事务
@Transactional(
propagation = Propagation.REQUIRES_NEW
)
2. propagation(枚举类)属性的值有:
propagation=Propagation.REQUIRED:默认情况,表示如果当前线程上有已经开启的事务可用,那么就在这个事务中运行。
propagation=Propagation.REQUIRES_NEW:表示不管当前线程上是否有已经开启的事务,都要开启新事务