目录
事务的传播机制有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()方法,加了事务的,默认REQUIRED:
@Transactional
public void updateStudent(){
Student student = new Student();
student.setSid(1);
student.setAge(25);
//更新sid为1的学生年龄为25
studentMapper.updateByPrimaryKeySelective