事务
1. 回顾事务
- 要么都成功,要么都失败
- 因为涉及到数据的一致性问题,十分重要
- 确保完整性,一致性
事务的ACID:
- 原子性(事物不可再分)
- 一致性(从一个状态切换到另一个状态)
- 隔离性(一个操作不会影响另一个操作)
- 多个业务操作一个资源,要保证事务互相隔离,防止数据损坏
- 持久性(造成的结果是永久的)
- 事务一旦提交,无论发生什么问题,结果都不会再受影响,被持久的写到存储器中
这四个性质保证了事务的ACID
为什么需要事务?
- 如果不配置事务,可能存在数据不一致的问题
- 如果不在Spring中配置事务,我们就需要在代码中手动配置事务。
- 事务在开发中十分重要,涉及到数据的一致性和完整性。
2. pring中的事务管理
- 声明式事务
- 编程式事务(会改变原有代码)
开启事务管理器
<!--配置声明式事务-->
<bean id="transactionManger" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<constructor-arg ref="dataSouece"/>
</bean>
结合AOP实现AOP织入(可以看作切面方法或者环绕增强的方法)
<!--结合AOP实现AOP织入-->
<!--配置事务通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManger">
<!--给哪些方法配置事务-->
<!--配置事务的传播特性:propagation-->
<!--这里可以写add*,delete*等-->
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="select*" read-only="true"/>
</tx:attributes>
</tx:advice>
配置事务切入
<!--配置事务切入-->
<aop:config>
<aop:pointcut id="txPointCut" expression="execution(* com.zhaox.mapper.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
</aop:config>
步骤总结:
- 先导入tx和aop的约束和依赖
- 首先开启事务管理器
- 进行AOP织入,对哪些方法怎么使用事务进行配置(propagation)
- 接下来就是进行事务切入,确定要切入的方法,确定切入的tx和切入点
Comments | NOTHING