我们知道,操作数据库时对于除了查询之外的更新操作,需要考虑到的事务的问题,在springboot中是如何来控制事务的呢?或者说在springboot中常用的控制事务的方法是什么呢?我们先来看一下不使用事务的效果,当然大家都知道下面这段代码的结果是什么,下面贴出service层的代码:
@Override
public void insertOneUser() {
Map<String, Object> paramMap=new HashMap<>();
paramMap.put("userName", "测试springboot结合mybatis插入");
userMapper.insertOneUser(paramMap);
System.out.println(1/0);
paramMap.put("userName", "测试springboot结合mybatis插入2");
userMapper.insertOneUser(paramMap);
}
当调用这个方法的时候,报了意料之中的错误:
数据库之中呢,插入了一条数据
很明显,这不是我们想要的结果吧,怎么控制事务呢?再简单也不过了,只需要在上边service的方法上加上@Transactional注解就完事了,就可以实现共同成功、共同失败的事务效果,即:
@Override @Transactional
public void insertOneUser() {
Map<String, Object> paramMap=new HashMap<>();
paramMap.put("userName", "测试springboot结合mybatis插入");
userMapper.insertOneUser(paramMap);
System.out.println(1/0);
paramMap.put("userName", "测试springboot结合mybatis插入2");
userMapper.insertOneUser(paramMap);
}
就行了。其实在没有学习springboot之前,我们在学习spring的时候,也学习过在spring中配置事务的方式,如果大家还记得的话,应该知道在spring中有两种配置事务的方式,一种是通过xml,可以参见上篇文章---spring通过xml方式配置事务管理,另外一种是通过注解来配置事务,在上边的例子中我用的就是注解的方式,只是在spring中使用注解的时候我们需要在配置文件里面加入<tx:annotation-driven transaction-manager="txManager" />来告知spring我们将要使用@Transactional注解来管理事务,在springboot中不需要再加这句话了,其实,从这里也可以看得出来,springboot并没有什么新的东西,它只是帮我们包装了spring框架与其他框架的继承,让我们进行更便捷的开发。