Spring事务一:事务的原子性控制以及事务传播特性:
我们学习的AOP,最重要的就是对事务的控制。
实际项目中,对数据库的单次操作,如一次insert,我们在jdbc Template中,使用的是jdbc的事务,会自动的为我们提交事务。但是在实际项目中,一次操作可能会涉及多次数据库的连接,这样是需要我们来保证事务的一致性的,要么同时成功,要么同时失败,使用jdbc实现起来是很麻烦的,使用AOP就可以来完成这些工作。如我单次操作,多次数据库的连接,AOP可以自动的来为我开启事务,关闭事务,提交事务,包括事务的传播特性,隔离级别,都可以使用AOP来做设置。
事务我们自己去写,是一件很麻烦的事情,事务的传播,隔离级别,自己去写的话是相当费事的,使用Spring的AOP可以简单很多。
1:事务的概述和特征:
1:什么是事务:
一荣俱荣,一损俱损,多个复杂的操作,可以将其看作是一个整体,要么同时成功,要么同时失败。
事务的四个特征(ACID):
这四个特征面试常问,工作中也是很重要的。
- 原子性(Atomic):表示组成一个事务的多个数据库的操作是不可分割的单元。只有所有的操作成功,才算成功,整个事务提交的时候,其中任何一个操作失败,都会导致所有操作失败,那么事务就会做回滚。
如我一次事务中,有十次对数据库的操作,这十次操作要么同时成功,要么同时失败。一个操作失败,即这十个操作全部失败。
- 一致性(Consistentcy):事务操作成功后,数据库所处的状态和业务规则保持一致。
如A转100元给B,就要保证A的账户减少100元,B的账户增加100元。转账前后,A和B账户的余额是不会有变化的。如果A减少了100元,但是B却没有增加100元,这样就是不一致的。
- 隔离性(islation):多个数据库的操作,操作相同的数据并发时,不同的事务有自己的数据空间,事务与事务之间不受干扰。
但是不是完全不受干扰,干扰程度由数据库或者操作事务的隔离级别来决定的,隔离级别越高,干扰就越低,并发性就越低,数据的一致性越好。
- 持久性(Druability):一旦事务提交成功,数据就持久化到数据库之中了,是不可以在回滚了。重启机器,重启服务器,数据都还是在的。
原子性:可以使用Spring的事务传播来控制,一致性和隔离性:使用数据库的隔离级别来控制
2:事务原子性剖析:
Spring中,原子性的控制主要体现在事务传播这一块(Spring对事物传播特性的控制)。
现在我来建立两张表:订单表和订单明细表,订单明细表中添加订单表的主键,但是不使用约束:
1:使用注解来处理事务传播特性:
说明:我们要保证事务的原子性