Spring 5 笔记 - 事务操作

1. 事务简介

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

事务的四个特性(ACID):

  • 原子性:要么都成功,要么都失败
  • 一致性:操作之前和操作之后,总量不变
  • 隔离性:多事务操作时,互相不会影响
  • 持久性:事务提交后保持不变。

2. 搭建事务操作场景

2.1 事务操作(Spring事务管理介绍)

  1. 事务添加到JavaEE三层结构中的Service层(业务逻辑层)
  1. 在Spring 进行事务管理操作有两种方式:
  • 编程式事务管理:通过代码控制
  • 声明式事务管理:通过配置方式(Spring 一般用这种)
  1. Spring的声明式事务管理有两种实现方式:
  • 基于注解方式:一般常用这种方式
  • 基于xml配置文件方式
  1. 在Spring进行声明式事务管理,底层使用AOP原理
  1. Sping 事务管理API
  • 提供一个接口,代表事务管理器,这个接口针对不同的框架提供不同的实现类。

2.2 事务操作(注解声明式事务管理)

  1. 在Spring 的配置文件中配置事务管理器
  2. 在Spring配置文件中开启事务注解需要引入名称空间tx
  3. service类上面(或者service类里面方法上面)添加事务注解@Transactional
  • 如果事务注解到类上面,那么类里面的所有方法都被事务管理;
  • 如果事务注解添加到类的方法上,那么被注解的方法才被事务管理。

示例如下:

3.2 事务操作(声明式事务管理参数设置)

查看@Transactional 注解中的参数如下:

参数说明:

  1. propagation 事务的传播行为,当一个事务被另一个事务方法调用时候,这个事务方法如何进行处理。

REQUIRED 解释如下:

REQUIRED 解释如下(如果方法A调用完方法B后出现异常,那么方法B正常执行完成后正常提交事务,即是内层事务正常提交,外层事务出现异常回滚):

SUPPORTS 解释如下(如果方法B单独被调用,方法B可以不参与事务管理,如果方法A调用方法B,那么方法B会被事务A管理):

  1. ioslation: 事务隔离级别
  • 事务有特性成为隔离性,多事务操作之间不会产生影响。不考虑隔离性会产生很多问题。
  • 不考虑隔离性会产生三个读问题:

(1)脏读:一个未提交的事务读取到另一个未提交事务的数据 (是一个致命问题) (如果另一个事务后面回滚了,即读到了错误的数据。)

(2)不可重复读:一个未提交的事务读取到另一个事务修改的数据 (是一个现象)(第一次读到未修改前的数据,第二次读到修改后的数据,两次读取的数据不同,也即是不可重复读)

(3)虚读(幻读):一个未提交的事务读取到另一个提交事务添加的数据

  • 通过设置事务的隔离级别可以避免上面的读问题,具体的隔离级别如下:

  1. timeout: 超时时间
  • 事务需要一定时间内进行提交,如果不提交进行回滚,默认值是“-1”,表示永不超时,设置时间以秒单位进行计算。
  1. readOnly: 是否只读
  • 读:查询操作;写:添加修改删除操作。
  • readOnly 默认值 false,表示可以查询,也可以添加修改删除操作。设置成true之后只能查询。
  1. rollbackFor: 回滚
  • 设置出现哪些异常进行事务回滚
  1. noRollbackFor:不回滚
  • 设置出现哪些异常不进行事务回滚

事务参数设置示例:

3.4 事务操作(XML声明式事务管理)

在Spring 的配置文件中配置如下三步:

第一步:配置事务管理器

第二步:配置通知

第三步:配置切入点和切面

例子:

同上面的例子,主要区别如下:

3.5 事务操作(完全注解开发)

  • 用配置类代替xml文件,不再需要用到xml配置文件,只用注解

例子:

同上例子,主要区别如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值