Spring-JDBC模板-事务

Spring-JDBC模板-事务

1.事务概述

什么是事务

  • 逻辑上的一组操作,组成这组操作的各个单元要么全部成功要么全部失败

事务的特点ACID

  • 原子性:事务不可分割(事务要么成功,要么失败)
  • 一致性:事务前后数据完整性保持一致(事务操作前后数据要保持一致,不能操作一半发生数据错误)
  • 隔离性:一个事务的执行不受其他事务的干扰
  • 持久性:一旦事务结束,数据就持久化到数据库

如果不考虑隔离性引发安全性问题

读问题
  • 脏读 :一个事务读到另一个事务未提交的数据
  • 不可重复读 :一个事务读到另一个事务已经提交的update的数据,导致一个事务中多次查询结果不一致
  • 虚读、幻读 :一个事务读到另一个事务已经提交的insert的数据,导致一个事务中多次查询结果不一致。
写问题
  • 丢失更新

2.事务概述Spring的事务的传播行为

什么是传播行为
  • 一个业务方法当中,调用另一个业务的方法
Spring中提供了七种事务的传播行为
  • 保证多个操作在同一个事务中
    • PROPAGATION_REQUIRED:默认值,如果A中有事务,使用A中的事务,如果A没有,创建一个新的事务,将操作包含进来
    • PROPAGATION_SUPPORTS:支持事务,如果A中有事务,使用A中的事务。如果A没有事务,不使用事务。
    • PROPAGATION_MANDATORY:
      如果A中有事务,使用A中的事务。如果A没有事务,抛出异常。
  • 保证多个操作不在同一个事务中
    • PROPAGATION_REQUIRES_NEW:
      如果A中有事务,将A的事务挂起(暂停),创建新事务,只包含自身操作。如果A中没有事务,创建一个新事务,包含自身操作。
    • PROPAGATION_NOT_SUPPORTED:
      如果A中有事务,将A的事务挂起。不使用事务管理。
    • PROPAGATION_NEVER:
      如果A中有事务,报异常。
  • 嵌套式事务
    • PROPAGATION_NESTED:
      嵌套事务,如果A中有事务,按照A的事务执行,执行完成后,设置一个保存点
      执行B中的操作,如果没有异常,执行通过,如果有异常,可以选择回滚到最初始位置,也可以回滚到保存点

3.Spring事务管理

添加事务

  • 编程式事务

    • 需要手动编写代码

    • 步骤:

        	1.配置平台事务管理器
        		<!--配置事务管理器-->
        		  <bean id="transactionManager" 
        		        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        		    <property name="dataSource" ref="dataSource"/>
        		  </bean>
        	2.Spring提供了事务管理的模板类
        		 <!--配置事务管理模板-->
        		  <bean id="transactionTemplate"
        		        class="org.springframework.transaction.support.TransactionTemplate">
        		    <property name="transactionManager" ref="transactionManager"/>
        		  </bean>
        	3.在业务层注入事务管理的模板
        		
        	4.编写事务管理的代码
      
  • 声明式事务

    • XML方式声明事务管理

        	1.引入aop的开发包
        	2.配置事务管理器
        		<bean id="transactionManager"
        		        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        		    <property name="dataSource" ref="dataSource"/>
        		  </bean>
        	3.AOP的配置
        		<tx:advice id="txAdvice" transaction-manager="transactionManager">
        		    <tx:attributes>
        		      <tx:method name="*" propagation="REQUIRED"/>
        		    </tx:attributes>
        		  </tx:advice>
        	配置
      
    • 注解方式声明事务管理

        	 配置事务管理器
      
        	开启注解事务
        		
        	在业务层添加注解
      
posted @ 2019-01-17 16:39  周世元ISO8859-1  Views(130)  Comments(0Edit  收藏  举报