前言
什么是事务?
简单来说就是把一组业务当成一个业务去做,要么同时成功,要么同时失败!
我们不希望在sql语句中有错误的情况下还正常执行下去。
事务的ACID原则
原子性
:要么同时成功,要么同时失败
一致性
: 资源保持一致
隔离性
:多个事务可能操作同一个资源,防止数据损坏
持久性
:事务一旦提交,无论系统发生什么问题,我们的结果都不会再被影响,被持久化的存储到存储器中。
使用
spring-mybatis提供了事务的解决方案。
声明事务
在spring-dao.xml文件中声明事务,开启事务。
<!--配置声明事务-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<constructor-arg ref="dataSource" />
</bean>
结合AOP实现事务的织入
<!--结合AOP实现事务的织入-->
<!--配置事务的通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--给哪些方法配置事务-->
<!--配置事务的传播特性 propagation-->
<tx:attributes>
<tx:method name="add" propagation="REQUIRED"/>
<tx:method name="delate"/>
<tx:method name="update"/>
<tx:method name="select"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
配置事务切入
<!--配置事务切入-->
<aop:config>
<aop:pointcut id="txPointCut" expression="execution(* com.cjh.mapper.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
</aop:config>
小结
这样完全不影响原有代码,但是却给代码增加了事务。