spring中编程式事务与声明式事务
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中编程式事务与声明式事务相关推荐
- Spring中的编程式事务与声明式事务
目录 编程式事务 使用TransactionTamplate 使用TransactionManager 声明式事务 XML文件配置 java代码配置---@transactional 编程式事务 通过 ...
- Spring事务处理之 编程式事务 和 声明式事务
对事务概念还不了解的可以先看一下 MySQL事务管理(初步了解) 这篇文章 !!! Spring事务管理学习步骤: 1.掌握Spring事务属性 2.掌握Spring事务核心API 3.掌握Sprin ...
- 事务声明声明式事务和编程式事务区别
事务声明声明式事务和编程式事务区别 1.编程式事务: 所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理.管理使用TransactionTemplate或者直接使用底层的Pla ...
- spring 的4种事务管理(1种编程式+3种声明式)
见:http://blog.csdn.net/sinat_25926481/article/details/48208619 Spring的4种事务管理(1种编程式事务+三种声明事务) 一.Sprin ...
- 编程式事务与声明式事务
编程式事务 1.加入jar包 com.springsource.net.sf.cglib-2.2.0.jar com.springsource.org.aopalliance-1.0.0.jar co ...
- 编程式事务与声明式事务的区别
通俗点讲就是: 编程式事务就是自己写Try catch语句调用commit\rollback等函数来实现那段业务数据改变的事务性. 声明式事务:是通过框架和事务定义配置给自己的业务代码添加事务性,比如 ...
- 《Spring系列》第15章 声明式事务(一) 基础使用
一.ACID特性 ⑴ 原子性(Atomicity)原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果成功就必须要完全应用到数据库 ...
- Spring事务管理--声明式事务管理
Spring的事务管理分为两种方式:1,传统的编程式事务管理(编码式事务管理):2,声明式事务管理. Spring的声明式事务管理是指将事务管理代码从业务方法中分离出来,以申明的方式实现事务管理.Sp ...
- spring框架学习 - Data Access之 事务管理 - 声明式事务管理
接上一篇博客:https://blog.csdn.net/qq_43605444/article/details/122085016?spm=1001.2014.3001.5502 4.声明式事务管理 ...
最新文章
- 2022-2028年中国卫星互联网产业深度调研及投资前景预测报告(全卷)
- DBA_Oracle基本体系内存和进程结构(概念)
- 【笔记】二叉树递归算法和非递归算法的实现 先序/中序/后续遍历 打印结点以及顺序数 构造二叉树
- 学习 lodash 源码整体架构,打造属于自己的函数式编程类库
- ocp跟oce的区别 oracle_Oracle视频10g 11g认证视频教程 OCA/OCP 从入门到精通 数据库DBA...
- Django——多个数据库
- Python 多进程 multiprocessing 使用示例
- json 解析_json爬坑1:yajl解析json
- Java-虚拟机-执行引擎/解释器/编译
- C#文件和目录的操作
- 测试Live Writer Beta2功能
- JAVA CLASS混淆工具:Allatori 简单试用
- 做JSP大学实用教程实验
- python 图标题上移_请问如何在这个Python中将标题一起爬下来啊
- 解决Redis错误MISCONF Redis is configured to save RDB snapshots
- jzojNOIP2014模拟 8.14总结
- VBS ADODB操作帮助手册
- 出海竞争加剧,全球头部秀场直播平台LiveMe如何应对新挑战?
- root 红米note5_红米Note5 root教程_红米Note5卡刷root包来获取root权限
- python中美元人汇率_Python获取美元人民币实时汇率