spring事务的分类:声明式事务、编程式事务
spring事务的原理:通过AOP,环绕通知进行拦截。
使用spring事务的注意事项:不能try.(因为要将异常抛出给外层)
默认开启事务注解。(不用添加@EnableTransactionalManagment)
在没有使用事务注解时:
接上篇博客中已有项目,在service层处理事务,在不添加事务时,将service层的方法改为:
debug启动项目,访问url,传入age为0:
在执行完第17行,准备执行第18行之前
此时去看一下数据库:
这条数据已经插入到数据库了。然后我们f6继续向下执行第18行:
浏览器也出现了异常界面:
此时抛出了算数异常。也就是说在我们没有使用事务的时候,在执行插入语句之后,数据就立刻进入数据库中,无论后面是否会出现异常,该数据都无法还原。
下面使用@Transactional开始事务测试:
debug启动,依然在执行完第17行时,我们查看数据库:
此时发现,与不使用事务时的情况不同,使用事务时,并没有在执行insert方法之后,立即保存到数据库中。然后继续f6向下执行:
依然抛出异常,此时再看数据库:
数据最终也没能保存。说明在使用事务注解时,该方法中出现异常时,数据就不会保存到数据库中。