介绍:
1.事务通常添加到 JavaEE 三层结构里面 Service 层(业务逻辑层)
2.在Spring中管理事务
编程式管理(其实就是代码)
声明式管理(注解方式和XML配置的方式)
3.声明式管理底层使用的其实就是AOP原理
================================================
注解声明式管理
1.创建事务管理器:
2.开启事务扫描(须先导入tx空间名称)
3.在类或方法上面添加@Transactional (事务注解)
类上面: 为这个类添加事务
方法上:为这个方法添加事务
============================================
事务管理操作管理参数
1、注解里面可以配置事务相关参数
2、propagation:事务传播行为
3、Isolation隔离级别:
mysql四个隔离级别(介绍):
1.Read uncommitted (读未提交)
一个事务可以读取另一个事务未提交的数据,会导致脏读的发生。
2.Read committed (读已提交)
若有事务对数据对数据进行更新操作,读操作要等待更新事务提交后才能读取数据,可以解决脏读,无法解决不可重复读。
3.Repeatable read (可重复读)
某一事务在进行读操作时,不允许其他事务进行修改操作。此时不允许修改操作,但是可能会有插入操作,即可能会有幻读的情况。
4.Serializable(序列化)
最高的事务隔离级别,在该级别下事务串行化执行,有效避免脏读,不可重复读,幻读,但是对数据库性能影响比较大。
4、timeout:超时时间
(1)事务需要在一定时间内进行提交,如果不提交进行回滚
(2)默认值是 -1 ,设置时间以秒单位进行计算
5、readOnly:是否只读
(1)读:查询操作,写:添加修改删除操作
(2)readOnly 默认值 false,表示可以查询,可以添加修改删除操作
(3)设置 readOnly 值是 true,设置成 true 之后,只能查询
6、rollbackFor:回滚
(1)设置出现哪些异常进行事务回滚
7、noRollbackFor:不回滚
(1)设置出现哪些异常不进行事务回滚
总结注解声明式事务:
①先通过创建DataSourceTransactionManager事务管理器,
②再通过增加tx空间注入,通过tx:annotation-driver 中的transaction-manager指定事务管理器,开启事务管理,
③最后在类上和方法上添加@Transactional 注解;

================================================
事务操作(XML 声明式事务管理):
<!--1 创建事务管理器-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--注入数据源-->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--2 配置通知-->
<tx:advice id="txadvice">
<!--配置事务参数-->
<tx:attributes>
<!--指定哪种规则的方法上面添加事务-->
<tx:method name="accountMoney" propagation="REQUIRED"/>
<!--<tx:method name="account*"/>-->
</tx:attributes>
</tx:advice>
<!--3 配置切入点和切面-->
<aop:config>
<!--配置切入点-->
<aop:pointcut id="pt" expression="execution(*
com.atguigu.spring5.service.UserService.*(..))"/>
<!--配置切面-->
<aop:advisor advice-ref="txadvice" pointcut-ref="pt"/>
</aop:config>
===================================================