• 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>
          	配置
        
      • 注解方式声明事务管理

          	 配置事务管理器
        
          	开启注解事务
          		
          	在业务层添加注解
  • 相关阅读:
    [luogu] P1440 求m区间内的最小值
    [NOI2014]起床困难综合症
    [SDOI2009]地图复原
    [USACO08JAN] Cow Contest
    【洛谷P5049】旅行(数据加强版)
    【NOIP2015】真题回顾
    【NOIP2014】真题回顾
    【UVA11987】Almost Union-Find
    【UVA11988】破损的键盘
    【UVA11134】传说中的车
  • 原文地址:https://www.cnblogs.com/zhou-shi-yuan-ISO8859-1/p/10283039.html
Copyright © 2020-2023  润新知