声明式事物
1、回顾事务
- 把一组业务当成一个业务来做,要么都成功,要么都失败
- 事务在项目开发中,十分重要,涉及到数据完整性的问题
- 可以确保数据完整性和一致性
事务ACID原则:
- 原子性:确保都成功或都失败
- 一致性:数据要么一起提交,要么一起失败
- 隔离性:多个事务操作一个资源时,是相互隔离的,防止数据损坏
- 持久性:事务一旦提交,无论系统是否出现问题,数据都会被持久化的存储到存储器中
2、Spring中的事物管理
- 声明式事物:使用AOP
- 编程式事物:需要在代码中,进行事务的管理
3、为什么需要事务?
- 如果不配置事务,可能存在数据提交不一致的情况
- 如果我们不在Spring去配置声明式事务,我们就需要手动配置事务
- 事务在项目的开发中非常重要,涉及到数据的完整性和一致性的问题
4、步骤
-
开启声明式事务管理
<!-- 开启事务管理--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="datasource"/> </bean>
-
进行事务的配置
<!-- 结合AOP实现事务的织入--> <!-- 配置事务通知--> <tx:advice id="txAdvise" transaction-manager="transactionManager"> <!-- 设置给那些方法配置事务propagation="REQUIRED" 这个传播特性是默认的--> <tx:attributes> <tx:method name="add" propagation="REQUIRED"/> <tx:method name="delete"/> <tx:method name="update"/> <tx:method name="query" read-only="true"/> <tx:method name="*"/> </tx:attributes> </tx:advice>
-
进行aop切入
<!-- 配置事务切入 路径下的所有类的所有方法都切入了事务--> <aop:config> <aop:pointcut id="pointcut" expression="execution(* com.yu.mapper.*.*(..))"/> <aop:advisor advice-ref="txAdvise" pointcut-ref="pointcut"/> </aop:config>