11.3 SpringBoot 事物支持

Spring Boot 使用事务非常简单,底层依然采用的是Spring本身提供的事务管理

  • 在入口类中使用注解 @EnableTransactionManagement 开启事务支持
  • 在访问数据库的Service方法上添加注解 @Transactional 即可

 案例思路:

        通过SpringBoot +MyBatis实现对数据库学生表的更新操作,在service层的方法中构建异常,查看事务是否生效

实现步骤:

        ① 在StudentController中添加更新学生的方法

@Controller
public class SpringBootController {

    @Autowired
    private StudentService studentService;

    @RequestMapping(value = "/springBoot/update")
    public @ResponseBody Object update() {
        Student student = new Student();
        student.setId(1);
        student.setName("Mark");
        student.setAge(100);

        int updateCount = studentService.update(student);

        return updateCount;
    }

}

②​​​​​​​在StudentService接口中添加更新学生方法

ublic interface StudentService {

    /**
     * 根据学生标识更新学生信息
     * @param student
     * @return
     */
    int update(Student student);
}

③​​​​​​​​​​​​​​在StudentServiceImpl接口实现类中对更新学生方法进行实现,并构建一个异常,同时在该方法上加@Transactional注解

Override
@Transactional //添加此注解说明该方法添加的事务管理
public int update(Student student) {

    int updateCount = studentMapper.updateByPrimaryKeySelective(student);

    System.out.println("更新结果:" + updateCount);

    //在此构造一个除数为0的异常,测试事务是否起作用
    int a = 10/0;

    return updateCount;
}

④​​​​​​​在Application类上加@EnableTransactionManagement开启事务支持

@EnableTransactionManagement可选,但是@Service必须添加事务才生效

@SpringBootApplication
@EnableTransactionManagement //SpringBoot开启事务的支持
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

⑤启动Application,通过浏览器访问进行测试

测试结果:浏览器会报 500;控制台会报 erro 错误;数据库信息未更改,说明事物起作用了。

​​​​​​​注释掉StudentServiceImpl上的@Transactional测试,数据库数据被更新,说明事物未起效(即未启动)。

异常:提供 程序出现例外情况,通过妥善处理,让程序能够执行下去的 一种机制
  运行时异常:非受检查异常  由于程序人员考虑不周密,出现的例外情况
  编译时异常:受检查异常    提醒检查程序

事物起作用就是在监控编译时异常,要想运行时异常事物也起作用,需要在注解中设置属性。在业务逻辑层添加属性 rollerbackFor(事物回滚)

 @Override
    @Transactional(rollbackFor = FileNotFoundException.class,propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT)
    public int update(Student student) throws FileNotFoundException {
        int num = studentMapper.updateByPrimaryKeySelective(student);
       // int j=100/0;
        new FileInputStream("");

        return num;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值