1.在入口类中使用@EnableTransactionManagement注解,开启事务支持
package com;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@SpringBootApplication
@EnableTransactionManagement
public class SpringbootMybatisApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisApplication.class, args);
}
}
2.在访问数据库的Service方法上加上 @Transactional
下面我们来编写一个测试demo
@Transactional
@Override
public int update() {
Course c = new Course();
c.setCourseId(1);
c.setCourseName("英语俺不会");
c.setCourseGrade(59);
int update = courseMapper.updateByPrimaryKeySelective(c);
System.out.println("更新结果---》"+update);
//抛个异常测试事务,除数不能为0,一个运行时异常。上次更进行回滚
int i = 10/0;
return update;
}
当加上事务管理,遇到运行时异常时,事务进行回滚,SQL没有commit。控制台会打印以下情况。
当你把 @Transactional注释掉,你会发现,数据库数据已经进行了修改,没有开启事务的SQL在遇到异常时,没有进行回滚。