事务。spring中基于xml配置事务和基于注解配置事务

概念:

事务是

指逻辑上的一组操作,组成这组操作的一系列操作要么全部成功,要么一个都不做。因此,事务的结束有两种,当事务中的所有操作全部成功执行时,事务提交。如果其中一个操作失败,将发生回滚操作,撤消到事务开始时的状态。
针对数据库,存储数据,要么成功,要么失败。

事务的特性:
  1. 原子性: 每一个事务都是不可再分割的,即使有多条语句,也是一个整体。要么一起成功,要么一起失败
  2. 一致性:执行事务的前后,数据库的状态应该是一致的。比如转账前后,数据库的总金额是一样的
  3. 隔离性:如果同时又几个事务同时在数据库中运行,互不影响。
  4. 持久性:事务一旦执行成功,对数据库的影响是持久性的。即使关机。
事务的隔离级别

一般理想状态下,事务的操作是互补干涉的。
但是并发访问会产生一下三个问题

  1. 脏读:一个事务中,读取到了另一个事务未提交的数据。当数据还在内存中没有写入硬盘,被读取,但是数据从内存中消失。
  2. 幻读:一个事务中,两次读取的数据数量不一致。这样是由于删除(delete)和添加(insert)造成的。比如A事务查询工资为1000的员工有5人,但是此时B事务插入一条1000工资的员工,则A读取的就变成了6条,从而造成了幻读。
  3. 不可重复读:A事务多次读取数据时,B事务对数据进行了修改,因而读到的数据不一致。也就是不可重复读。这个时由改(update)造成的。

为了解决上述三个并发问题。就要用到事务的隔离级别

  1. serializable(串行化):可以解决所有问题,但是效率低。也叫锁表。
  2. repeatable read(可重复读):可以解决脏读,不可复读。mysql默认这中级别
  3. read committed(读已提交):解决脏读。Oracle和SQL Server
  4. read uncommitted(读未提交):级别最低,任何都无法保证,效率最高,最不安全。

编程式事务

使用Java代码手动进行开启事务、提交事务、回滚事务。
编程式事务的三个相关类

1 PlatformTransactionManager

下图有详细的介绍。
我理解的就是一个平台事务管理器,每一种技术对事务的实现不同,就是说明这个事务时基于哪个平台的。
在这里插入图片描述

2 TransactionDefinition

定义事务属性的对象。
在这里插入图片描述
主要包含了事务的隔离级别和事务的传播行为

隔离级别

上面做了具体阐述
隔离级别

传播行为

传播行为

3 TransactionStatus

运行状态

声明式事务

AOP+编程式事务

xml配置声明式事务

  1. 配置平台事务管理器:spring不知道我们底层是用 的什么框架管理事务的。配置平台事务管理器
  2. 为spring提供的通知配置对应的配置信息,指定哪些方法需要被如何增强切点配通知 各个标签详解各个标签详解
  3. 织入织入

注解配置声明式事务

  1. 配置平台事务管理器
  2. 在要执行事务的方法和类上加@Transactionalzhujie注解
  3. 启用注解配置事务tx:annotation-driven/启用注解配置
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河西彭于晏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值