zoukankan      html  css  js  c++  java
  • Spring5快乐教程(十二)Spring事务管理

    一、概念和准备工作

    什么是事务

      定义:事务是数据库操作最基本的单元,逻辑上的一组操作,要么都成功,如果有一个操作失败则所有操作都失败

      典型场景:银行转账

    • 阿肥转账100闷给阿靓
    • 阿肥:-100  阿靓+100

    事务的四个特性(ACID)

    • 原子性:操作不可分割,要么都成功,一个失败则所有操作都失败。
    • 一致性:操作前和操作后的总量不变。
    • 隔离性:多事务间操作不会互相影响。
    • 持久性:事务提交后,表中数据会发生变化。

    搭建基本环境

    第一步 系统分析

    第二步 建表并写入记录

    第三步 创建Service和Dao,并完成对象的注入关系

    第四步 在dao层编写多钱和少钱的方法

    第五步 编写Service层

    第六步 编写测试类

    二、事务场景的引入

    三、事务管理介绍

      PS:事务一般添加到JavaEE三层结构里面的Service层(业务逻辑层)

      事务管理的方式:

    • 编程式事务管理
    • 声明式事务管理【常用】
      • 基于注解方式【常用】
      • 基于XML方式

      PS:在Spring中使用事务管理,底层使用AOP原理。

    Spring事务管理API

      提供了一个接口PlatformTransactionManager,代表事务管理器,这个接口根据不同的ORM框架提供类不同的实现类,来实现事务操作:

    编程式事务管理

      PS:详解可以参考这篇文章

    声明式事务管理【xml方式】

      PS:事务方法配置部分详见这里

    声明式事务管理【注解】

    第一步 在Spring配置文件中配置事务管理器

    第二步 在Spring配置文件中开启事务注解

    声明式事务管理【完全注解开发】

    四、事务管理相关参数

      我们可以在@Transactional,在这个注解里面可以配置事务的相关参数:

    • propagation事务传播行为
    • isolation事务隔离级别
    • timeout超时时间
    • readOnly是否只读
    • rollbackFor 回滚
    • noRollbackFor 不回滚

    事务传播行为

      事务传播行为: 多事务方法间进行调用的过程中,事务的管理方式。

      事务方法:对数据库表数据进行变化的操作【如增、删、改 PS:查询不算】

    事务传播行为分类

    例子解析事务传播行为

    事务隔离级别

      事务隔离级别:事务有一个特性--隔离性,多事务操作之间不会产生影响,如果不考虑隔离性的话,会产生很多问题:

    • 脏读
    • 不可重复读
    • 幻读(虚读)

      作用:为了解决上面的3个读的问题而产生。

    脏读【致命问题,必须避免】

      定义:一个未提交的事务读取到另外一个未提交事务的数据。

      可能产生的问题:被读取的事务回滚时,读取到的数据就不对了。

    不可重复读【现象,有时不可避免】

      定义:一个未提交的事务读取到另外一个已提交事务修改后的数据。【主要针对查询结果】

      可能产生的问题:一个事务范围内两个相同的查询却返回了不同数据。

    幻读(虚读)

      定义:一个未提交的事务读取到另外一个已提交事务添加后的数据。【主要针对查询结果】

      可能产生的问题:一个事务范围内统计时可能会有问题。

    隔离级别

    事务超时时间

      定义:事务需要在一定时间内进行提交,如果不提交则进行回滚

      默认值:-1【永不超时】

      单位:

    事务是否只读

    读:查询操作。

    写:添加、修改、删除操作。

    默认值:false,表示可以进行查询,也可以进行增删改操作。

    readOnly = true:表示只能进行查询操作

    事务回滚

      设置出现哪些异常进行事务回滚。

    事务不回滚

      设置出现哪些异常进行事务回滚。

  • 相关阅读:
    js格式化时间和时间操作
    java链接FTP实现上传和下载
    JQuery 对 Select option 的操作
    利用set实现去重
    数组去重的五个办法
    JavaScript实现360度全景图片展示效果
    对于行高(line-height)的一些理解
    Flex 布局教程:语法篇
    学习Javascript闭包
    MySQL explain字段解释
  • 原文地址:https://www.cnblogs.com/riches/p/14376149.html
Copyright © 2011-2022 走看看