事务的传播机制

目录

1.形象说明:

2.代码演示:

2.1?REQUIRED

2.1.1? 验证共用一个事务

2.1.2? 验证当前没有事务,就新建一个事务

2.2?SUPPORTS

2.2.1 支持使用当前事务

2.2.2?如果当前事务不存在,则不使用事务

2.3?MANDATORY

2.3.1 支持使用当前事务

2.3.2?如果当前事务不存在,则抛出Exception

2.4?REQUIRES_NEW

2.4.1 当前事务不存在,创建一个新事务

2.4.2 新建一个事务,当前事务存在,把当前事务挂起

2.5?NOT_SUPPORTED

2.5.1 无事务执行

2.5.2?如果当前事务存在,把当前事务挂起。

2.6?NEVER

2.6.1 无事务执行

2.6.2?如果当前有事务则抛出Exception

2.7??NESTED


事务的传播机制有7种,如下图所示:

1.形象说明:

为了更好的理解,下面我们形象的说明一下几种传播机制是什么意思:

比如你下班回家,有以下几种场景

0.REQUIRED ------ 就是如果老婆做饭了,你就吃老婆做的饭;如果老婆没有做饭,你就自己做饭吃,反正你就是要吃饭(反正要在事务中运行);

1.SUPPORTS ------ 如果老婆做饭了,你就吃老婆做的饭;如果老婆没有做饭,你就不吃(不一定非要在事务中运行);

2.MANDATORY ------ 非要吃老婆做的饭,老婆要是没有做饭,你就大发脾气,典型的家暴男;

3.REQUIRES_NEW ------ 劳资非要吃自己做的饭,就算老婆把饭做好了,你也不吃老婆做的;

4.NOT_SUPPORTED ------ 劳资就是不吃饭,就算老婆把饭做好了,我也不吃;

5.NEVER ------ 劳资就是不吃饭,如果老婆把饭做好了,我还要发脾气;

6.NESTED ------ 暂不做解释,后面会详解;

本文主要是想用代码实现这几种传播机制的具体使用;

2.代码演示:

有两张表:

school表

student表

我们如何去测试两个方法是否使用的同一个事务呢?就看是否共用同一个数据库连接或者共用同一个会话;

2.1REQUIRED

支持使用当前事务,如果当前事务不存在,创建一个新事务。

2.1.1 验证共用一个事务

schoolService.updateSchool()方法:

@Transactional
    public void updateSchool(){
        School school = new School();
        school.setId(1);
        school.setName("湖南大学");
        school.setLocation("湖南");
        //更新id为1的学校名称为湖南大学,地址为湖南
        schoolMapper.updateByPrimaryKeySelective(school);
        
        //调用另一个方法更新学生信息
        studentService.updateStudent();
        System.out.println(1/0);
    }

studentService.updateStudent()方法&

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值