spring中使用事务有两种方式,一种是编程式,一种是声明式。

编程式事务

编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。类似下面的代码,注入transactionTemplate后,执行execute方法,方法参数是一个TransactionCallback的匿名实现,TransactionCallbackWithoutResult是一个抽象类,实现了TransactionCallback接口。

//在需要使用的类中注入transactionTemplate
@Autowired
private TransactionTemplate transactionTemplate;//不关心结果的事务执行方式
transactionTemplate.execute(new TransactionCallbackWithoutResult() {@Overrideprotected void doInTransactionWithoutResult(TransactionStatus status) {//TODO db操作  业务代码}
});//关心结果的事务执行方式
Object object= transactionTemplate.execute(new TransactionCallback<Object>() {@Overridepublic Object doInTransaction(TransactionStatus status) {//doSomething()为业务代码Object object = doSomething();return object;}
});

声明式事务

声明式事务是基于AOP之上的。其本质是在执行方法前后进行拦截,在方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。如下的代码只需要在方法上面加入注解@Transactional就可以进行事务操作。以删除促销为例,我们删除促销的时候会删除促销关联的产品,只有这两个操作都执行成功才算成功,所以整合成一个事务。

//声明式事务
@Transactional
public Integer deletePromotion(Integer id) {//查询一下Promotion promotion = getPromotion(id);//删除促销int ret = promotionDao.deletePromotion(promotion.getId());//再删除产品if(ret > 0){promotionProductDao.deletePromotionProductByPromotionId(promotion.getId());}return ret;
}

总结

spring中使用事务有两种方式,一种是编程式事务,一种是声明式事务。编程式事务推荐使用TransactionTemplate,实现TransactionCallback接口,需要编码实现;声明式事务只需要在函数增加注解@Transactional,无需任何配置,代码入侵较小,使用AOP原理,推荐使用声明式事务,在应用启动类上记得加上@EnableTransactionManagement注解哟。

转自springboot或spring中使用编程式事务和声明式事务
更加详细的解释请移步:Spring编程式和声明式事务实例讲解

spring中编程式事务与声明式事务相关推荐

  1. Spring中的编程式事务与声明式事务

    目录 编程式事务 使用TransactionTamplate 使用TransactionManager 声明式事务 XML文件配置 java代码配置---@transactional 编程式事务 通过 ...

  2. Spring事务处理之 编程式事务 和 声明式事务

    对事务概念还不了解的可以先看一下 MySQL事务管理(初步了解) 这篇文章 !!! Spring事务管理学习步骤: 1.掌握Spring事务属性 2.掌握Spring事务核心API 3.掌握Sprin ...

  3. 事务声明声明式事务和编程式事务区别

    事务声明声明式事务和编程式事务区别 1.编程式事务: 所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理.管理使用TransactionTemplate或者直接使用底层的Pla ...

  4. spring 的4种事务管理(1种编程式+3种声明式)

    见:http://blog.csdn.net/sinat_25926481/article/details/48208619 Spring的4种事务管理(1种编程式事务+三种声明事务) 一.Sprin ...

  5. 编程式事务与声明式事务

    编程式事务 1.加入jar包 com.springsource.net.sf.cglib-2.2.0.jar com.springsource.org.aopalliance-1.0.0.jar co ...

  6. 编程式事务与声明式事务的区别

    通俗点讲就是: 编程式事务就是自己写Try catch语句调用commit\rollback等函数来实现那段业务数据改变的事务性. 声明式事务:是通过框架和事务定义配置给自己的业务代码添加事务性,比如 ...

  7. 《Spring系列》第15章 声明式事务(一) 基础使用

    一.ACID特性 ⑴ 原子性(Atomicity)原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库 ...

  8. Spring事务管理--声明式事务管理

    Spring的事务管理分为两种方式:1,传统的编程式事务管理(编码式事务管理):2,声明式事务管理. Spring的声明式事务管理是指将事务管理代码从业务方法中分离出来,以申明的方式实现事务管理.Sp ...

  9. spring框架学习 - Data Access之 事务管理 - 声明式事务管理

    接上一篇博客:https://blog.csdn.net/qq_43605444/article/details/122085016?spm=1001.2014.3001.5502 4.声明式事务管理 ...

最新文章

  1. 2022-2028年中国卫星互联网产业深度调研及投资前景预测报告(全卷)
  2. DBA_Oracle基本体系内存和进程结构(概念)
  3. 【笔记】二叉树递归算法和非递归算法的实现 先序/中序/后续遍历 打印结点以及顺序数 构造二叉树
  4. 学习 lodash 源码整体架构,打造属于自己的函数式编程类库
  5. ocp跟oce的区别 oracle_Oracle视频10g 11g认证视频教程 OCA/OCP 从入门到精通 数据库DBA...
  6. Django——多个数据库
  7. Python 多进程 multiprocessing 使用示例
  8. json 解析_json爬坑1:yajl解析json
  9. Java-虚拟机-执行引擎/解释器/编译
  10. C#文件和目录的操作
  11. 测试Live Writer Beta2功能
  12. JAVA CLASS混淆工具:Allatori 简单试用
  13. 做JSP大学实用教程实验
  14. python 图标题上移_请问如何在这个Python中将标题一起爬下来啊
  15. 解决Redis错误MISCONF Redis is configured to save RDB snapshots
  16. jzojNOIP2014模拟 8.14总结
  17. VBS ADODB操作帮助手册
  18. 出海竞争加剧,全球头部秀场直播平台LiveMe如何应对新挑战?
  19. root 红米note5_红米Note5 root教程_红米Note5卡刷root包来获取root权限
  20. python中美元人汇率_Python获取美元人民币实时汇率

热门文章

  1. 【Python基础知识库】Python中字符串和字节串的区别
  2. Android中使用全局变量(转)
  3. 使用VS2019生成C#项目的exe文件和setup安装包(使用VS2019社区版)
  4. linux 查看文件系统类型
  5. JavaScript 截取数组
  6. 截面剪切校正因子是什么?
  7. MQTT libary之发布和订阅之开发秘籍
  8. 上海关于外来人员的四金问题
  9. Ubuntu: 删除ubuntu桌面的两个图标
  10. python读取pdf文件_python读取pdf文件