Spring事务
1、主要解决了什么样的问题
假设目前有这么一个业务问题:我们要查询所有的用户的业务,在这个业务中有三个步骤,首先增加一个用户,再删除这个用户,最后查询所有用户的业务;但是其中删除用户的这一个操作有一个语法错误或者其他错误,导致删除失败,并且数据库中会新增刚才所增加的那个用户。即,业务没有成功,但是数据库中却多了一个人。
**Spring事务要解决的事情:**根据事务的原子性,要么全成功,要么全失败;删除失败后,应该回滚。使数据库中的数据量不变。
2、如何使用Spring事务
- 声明式事务:AOP
- 编程式事务:需要在代码中进行事务的管理
配置声明式事务
采用AOP横切的方式进行事务的织入
<!--开启声明式事务-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<constructor-arg ref="dataSource" />
</bean>
<!--结合AOP实现事务的织入-->
<!--配置事务的通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<!--给那些方法配置事务-->
<!--配置事务的传播特性:propagation="REQUIRED",默认就是required(支持当前事务,如果当前没有事务,就新建一个事务)-->
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!--配置事务的切入-->
<aop:config>
<aop:pointcut id="txPointcut" expression="execution(* com.psy.mapper.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>