整合SpringBoot + MyBatis 后,须要对MyBatis的事务进行管理java
如下作个测试,先看示例代码spring
在启动类加事务管理注解数据库
@EnableTransactionManagement
Service的实现类的添加方法加上相关注解 @Transactionalmybatis
@Override @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout = 36000,rollbackFor = Exception.class) public String addUser(int id) { //DAO.add() try { Thread.sleep(30000); }catch (Exception e) { e.printStackTrace(); } //模拟抛异常回滚事务 if(1==1) { throw new NullPointerException(); } if (flag==1) { return "success"; } return "failed"; }
@Transactional 若是去掉这个注解,那么程序在执行完 DAO.add() 后,数据库就会更新了数据,就算后面抛了异常。ide
若是加上@Transactional,那么在抛异常后就会回滚,数据库就不会更新到。测试
好像跟Spring管理mybatis事务的autocommit的默认值有关,详情能够看源码。.net
org.springframework.jdbc.datasource.DataSourceTransactionManagercode