Spring中的事务

先抛问题

看以下示例1

@Service
public class TeacherServiceImpl extends ServiceImpl<TeacherMapper, Teacher> implements TeacherService {

    @Resource
    TeacherMapper teacherMapper;

    @Override
    @Transactional
    public void insertTeacher() {
        teacherMapper.insert(new Teacher(1L,"张三"));
        throw new RuntimeException("抛异常测试");
    }

    @Override
    public void method(){
        insertTeacher();
    }
}

@SpringBootTest
class TeacherServiceImplTest {

    @Resource
    TeacherService teacherService;

    @Test
    void method() {
        teacherService.method();
    }
}

是否会插入?

会插入,因为 method()方法没有事务注解,导致 insertTeacher方法事务不生效

###示例2

@Service
public class TeacherServiceImpl extends ServiceImpl<TeacherMapper, Teacher> implements TeacherService {

    @Resource
    TeacherMapper teacherMapper;

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void insertTeacher() {
        teacherMapper.insert(new Teacher(1L,"张三"));
        throw new RuntimeException("抛异常测试");
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void method(){
        teacherMapper.insert(new Teacher(2L,"李四"));
        try {
            insertTeacher();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

@SpringBootTest
class TeacherServiceImplTest {

    @Resource
    TeacherService teacherService;
    @Resource
    StudentService studentService;

    @Test
    void method() {
        teacherService.method();
    }
}

是否会回滚?

两者都插入