在 Spring Boot 中操作事务有两种方式:编程式事务或声明式事务,接下来我们一起来看二者的具体实现。

1.编程式事务

在 Spring Boot 中实现编程式事务又有两种实现方法:

  1. 使用 TransactionTemplate 对象实现编程式事务;
  2. 使用更加底层的 TransactionManager 对象实现编程式事务。

它们的具体实现代码如下。

1.1 TransactionTemplate 使用

要使用 TransactionTemplate 对象需要先将 TransactionTemplate 注入到当前类中 ,然后再使用它提供的 execute 方法执行事务并返回相应的执行结果,如果程序在执行途中出现了异常,那么就可以使用代码手动回滚事务,具体实现代码如下:

1.2 TransactionManager 使用

TransactionManager 实现编程式事务相对麻烦一点,它需要使用两个对象:TransactionManager 的子类,加上 TransactionDefinition 事务定义对象,再通过调用 TransactionManager 的 getTransaction 获取并开启事务,然后调用 TransactionManager 提供的 commit 方法提交事务,或使用它的另一个方法 rollback 回滚事务,它的具体实现代码如下:



从上述代码可以看出,使用编程式事务更加灵活,但写法比较麻烦

2.声明式事务

声明式事务的实现比较简单,只需要在方法上或类上添加 @Transactional 注解即可,当加入了 @Transactional 注解就可以实现在方法执行前,自动开启事务;在方法成功执行完,自动提交事务;如果方法在执行期间,出现了异常,那么它会自动回滚事务。

它的具体使用如下:



当然,@Transactional 支持很多参数的设置,它的参数设置列表如下:



参数的设置方法如下:

总结

本文我们介绍了两种事务的实现方式:编程式事务或声明式事务。其中编程式事务又分为两种实现:使用 TransactionTemplate 对象或更加底层的 TransactionManager 对象分别实现编程式事务,它们的优点是灵活性更高,可以在任何代码片段上添加事务;而声明式事务的实现更加简单,只需要在类或方法上添加 @Transactional 注解即可实现事务的自动开启和提交(以及回滚)。

是非审之于己,毁誉听之于人,得失安之于数。

公众号:Java面试真题解析

面试合集:https://gitee.com/mydb/interview

最新文章

  1. 【WP 8.1开发】How to 图像处理
  2. XIB 上的控件不显示怎么办
  3. Qt 之 饼图
  4. [Nhibernate]二级缓存(二)
  5. Visual Studio 2012 常用快捷键
  6. (int &)a 和(int)a
  7. JSP SQL注入
  8. codeforces 508D . Tanya and Password 欧拉通路
  9. twrp 2.7.0 ui.xml简单分析,布局讲解,第一章
  10. Android 禁止屏幕休眠和锁屏的方法
  11. Github最流行的10,000个Java项目使用的类库
  12. 【算法】BILSTM+CRF中的条件随机场
  13. js发布订阅模式实现
  14. vs code 设置问题
  15. 兼容ie,火狐的判断回车键js脚本
  16. C++学习基础十七-- 函数指针
  17. Confluence 6 空间标识
  18. fis代码压缩
  19. git学习笔记(四)—— 分支管理
  20. 分析maven的优点

热门文章

  1. python小题目练习(七)
  2. Python制作手游《和平精英》游戏资料查询助手
  3. windows版anaconda+CUDA9.0+cudnn7+pytorch+tensorflow安装
  4. SELECT 的6大子句
  5. 2019 CSP-J 初赛解析
  6. 集合-Collection工具类
  7. The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6ACC0B21F32
  8. vue 调用nginx服务跨越的问题
  9. Mvcapi解决H5请求接口跨域问题
  10. for_in循环