目录
事务的基础
1.事务的定义
事务是一组最小的逻辑单元,这组单元里面的操作要么同时成功,要么同时失败。
2.事务的特点
1.原子性:事务是最小单位不可分割
2.一致性:要么全部执行成功,要么全部操作失败
3.隔离性:事务之间互不影响
4.持久性:事务一旦提交就会持久化到数据库中
3.事务的问题
1.脏读:一个事务读取了另一个事务没有提交的数据
2.虚读(幻读):一个受insert影响,读同一张表,多次读取行数不一样
3.不可重复读:一个受update影响,查同一条数据,多次读取结果不一致
4.事务的隔离级别
1.read uncomited:未提交读,没有解决任何问题
2.read commited:已提交读,解决脏读问题
3.repeatable read:可重复读,解决虚读 幻读问题
4.serializable:串行化,解决所有问题
5.事务的传播行为
1.支持当前事务:
PROPAGATION_REQUIRED:当前有事务就在当前事务处理,当前没有事务就新建事务执行;
PROPAGATION_SUPPORTS:当前有事务就在当前事务处理,当前没有事务就以非事务形式执行;
PROPAGATION_MANDATORY:当前有事务就在当前事务处理,当前没有事务就抛异常;
2.不支持当前事务:
PROPAGATION_REQUIRES_NEW:当前有事务就挂起,新建事务执行,当前没有事务就新建事务执行;
PROPAGATION_NOT_SUPPORTED :当前有事务就挂起,以非事务的形式执行;
PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
3.嵌套事务:
PROPAGATION_NESTED:当前存在事务,则在嵌套事务内执行。如果当前没有事务,就新建事务执行。
6.Spring的事务管理
6.1 编程式事务管理
改变了业务逻辑的结构,也比较复杂。
6.2 声明式事务管理
1.XML版本
1.加入tx约束
2.配置平台事务管理器
<bean id = "transactionManager" class=""></bean>
3.增加tx标签
<tx:advice id="tx" transaction-manager="指定增强使用哪一个平台事务管理器">
//事务的属性配置
<tx:attribute>
//在切入点基础上,对不同的方法进行不同事务配置
<tx:method name="insert*" isolation="DEFAULT" propagation="REQUIRED"/>
<tx:method name="save*" isolation="DEFAULT" propagation="REQUIRED"/>
<tx:method name="update*" isolation="DEFAULT" propagation="REQUIRED"/>
<tx:method name="delete*" isolation="DEFAULT" propagation="REQUIRED"/>
<tx:method name="remove*" isolation="DEFAULT" propagation="REQUIRED"/>
<tx:method name="query*" isolation="true" propagation="REQUIRED"/>
<tx:method name="select*" isolation="true" propagation="REQUIRED"/>
<tx:method name="transfer*" isolation="DEFAULT" propagation="REQUIRED"/>
</tx:attribute>
</tx:advice>
2.注解版
@Transational(isolation="隔离级别",propegation="传播行为")