1. 基本概念

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

1.1经典场景

银行转账
张三给李四转账100元
张三少100,李四多100

1.2 事务四个特性(ACID)

  • 原子性
    • 要么都成功,一个失败都失败
  • 一致性
    • 事务提交前后的数据完整性和状态行保持一致,比如张三有100 ,李四有100 ,加起来200,张三给李四100后,他们俩个加起来还是200
  • 隔离性
    • 在事务操作的时候不会产生影响,比如两个人同时操作一条记录,这个过程中他们之间是不会产生影响的
  • 持久性

    • 事务最终需要提交 ,提交之后表中数据真正发生了变化,这就是持久性

      2. 事务操作

      1. // 转账方法
      2. @Test
      3. public void test1(){
      4. // 张三少100
      5. del();
      6. int i = 10/0;
      7. // 李四多100
      8. add();
      9. }

      张三少100后,继续往下执行,除数为0就会出现异常,李四就不会增加100

(1)上面问题怎么解决?

  • 使用事务解决

(2)事务操作过程
image.png

2.1 在Spring进行事务管理操作

有两种方法:

  1. 编程式事务管理
    1. 就是上图的方式,第一步,第二步,第三步。。。代码冗余
  2. 声明式事务管理(推荐)
    1. 基于注解方式
    2. 基于xml配置文件方式

在Spring 进行声明式事务管理,底层使用AOP原理

2.2 Spring事务管理API

  1. 提供一个接口,代表事务管理器,这个接口针对不同的框架提供不同的实现类
    1. mysql 就实现DataSourceTransactionManager

image.png

2.3 注解方式实现事务管理