事务
一,事务的含义:
事务(TRANSACTION) 是作为单个逻辑工作单元执行的一系列操作。多个操作作为一个整体向系统提交,要么都执行,要么都不执行。事务是一个不可分割的逻辑单元。
二,事务的特性(ACID):
原子性(Atomicity):
事务是一个完整的操作,事务的各步操作都是不可再分的,要么都执行, 要么都不执行。
一致性(Consistency):
当事务完成时,数据必须处于一致的状态。
隔离性(Isolation):
并发事务之间相互独立、隔离,它不应以任何方式依赖于或影响其他事务。
持久性(Durability):
事务完成后,它对数据库的修改被永久保持。
在Spring中,所有操作事务的类都继承自 PlatformTransactionManager
三,事务的隔离级别
ISOLATION_READ_UNCOMMITTED:读未提交
ISOLATION_READ_COMMITTED:读已提交
ISOLATION_REPEATABLE_READ:可重复读
ISOLATION_SERIALIZABLE:串行化
四,脏读,不可重复读,幻读(虚读)
脏读:A事务读取B事务尚未提交的更改数据,并在这个数据的基础上进行操作,这时候如果事务B回滚,那么A事务读到的数据是不被承认的。
不可重复读:不可重复读是指A事务读取了B事务已经提交的更改数据。假如A在取款事务的过程中,B往该账户转账100,A两次读取的余额发生不一致。
幻读:A事务读取B事务提交的新增数据,会引发幻读问题。幻读一般发生在计算统计数据的事务中
五,事务的传播行为
六,案例
实体:
dao层:
dao层实现:
service层:
service层实现:
配置文件:
(1)代理工厂
(2)AOP
(3) 注解
测试:
注意点:以上三种配置方式无论哪种都必须在applicationContext.xml文件中配置事务管理器