Spring事务简单操作
什么是事务?
事务是一组操作的集合,是一个不可分割的操作
事务会把所有的操作作为⼀个整体, ⼀起向数据库提交或者是撤销操作请求. 所以这组操作要么同时
成功, 要么同时失败.
事务的操作
分为三步:
1. 开启事start transaction/ begin (⼀组操作前开启事务)
2. 提交事务: commit (这组操作全部成功, 提交事务)
3. 回滚事务: rollback (这组操作中间任何⼀个操作出现异常, 回滚事务)
Spring中事务的实现
Spring 中的事务操作分为两类:
1. 编程式事务(⼿动写代码操作事务)
2. 声明式事务(利⽤注解⾃动开启和提交事务
声明式事务
在需要事务的⽅法上添加 @Transactional 注解就可以实现了. ⽆需⼿动开启事务和提交事务, 进入
⽅法时⾃动开启事务, ⽅法执⾏完会⾃动提交事务, 如果中途发⽣了没有处理的异常会⾃动回滚事务
@Transactional成功
我们先建立一个数据库表
当我们插入数据时,带上@Transactional注解,如果成功就会自动提交,如果错误就会回滚
结果如下
这里很明显,我们的数据已经插入成功了
@Transactional异常
当我们的数据异常的时候,就会触发回滚
结果如下:
上部分代码显示插入成功,但是下面因为有错误就造成了回滚,没有提示有commit
我们查看数据库表,因为回滚,所以是没有数据插入的
@Transactional捕获异常
上述代码中,如果有错误就会产生回滚,导致数据插入不进去,我们可以捕获异常进行处理的方法,使数据插入成功
结果如下:
可以看到这次数据插入成功了,提示有commit
我们查看数据库表,发现捕获异常后就可以使数据插入成功
@Transactional捕获异常怎么回滚
当我们捕获异常,数据就会插入成功,但是我们在捕获异常后,怎么再次回滚呢?
两个方法:
1、重新抛出异常
当我们捕获异常后不处理,再次抛一个异常出去后,就会产生回滚
2、手动回滚业务
当我们捕获异常后,想要产生回滚,我们也可以手动回滚事务