java 代码样式为什么需要事务,讲述Spring5事务几种方式 认识API

news2025/2/24 13:03:33

首先 在上一文java Spring5 搭建操作数据库事务环境中 我们搭建了一个事务的业务场景 然后 打开项目
我们继续

先看到数据库表 看好两个人的余额
在这里插入图片描述
然后 来到senvice层下的transfAccoSenvice
将里面的 transferAccounts方法 更改如下

//转账方法
public void transferAccounts(int sponsorId, int recipientId, double money){
    Boolean paym = pay(money,sponsorId);
    if(paym){
        int i = 10/0;
        income(money,recipientId);
        System.out.println("交易完成");
    }
}

拿 0 作为 /除数 自然是要异常的 我们就是要造一个 第一段sql执行成功 然后异常导致第二段sql执行不了的情况
我们再次运行测试类 运行结果如下
在这里插入图片描述
可以看到 很明显 第一个sql已经执行完了 但后面就因为 0 为除数 抛出了异常

我们到数据库中 刷新表 然后重新打开
在这里插入图片描述
我们可以明显看到 张三的钱因为第二段sql没有执行 并没有加到 但李四的余额却是因为第一段sql的执行 实打实的被扣了

这里 是我手工模仿的异常 但实际情况中 也会有不可抗力的元素导致异常 这种事 出个一两次 这个程序也就不用做了

这时我们就需要事务 按事务的逻辑就是 要么 李四的钱扣了 那么张三的钱 他就应该加上 要么 张三的钱没加到 那么 李四的钱 他就也不应该扣

然后我们要用事务 就需要考虑在三层架构的哪一层?
我想很多人会想 dao 其实我一开始也这样认为 甚至 到现在为止 我还是依旧认为放dao层合理
但没办法 我们可以看senvice中的代码
在这里插入图片描述
因为 整个的业务聚焦点在 senvice的业务逻辑层中 在这里 才能把握整个逻辑点

所以 我一直认为 当性能和需求冲突时 牺牲性能 我最讨厌那种一天到晚 规范规范的人 我说实话 我打心底看不起那些 以牺牲功能质量 甚至 增加使用者操作步骤来保证性能的人 我还是觉得 用户的方便 才是第一前提

所以 事务一般会添加在 三层架构中的 senvice 业务逻辑层中

在Spring中 事务有两种方式

1 编程式事务管理
2 声明式事务管理

而在开发过程中 一般都会选择声明式

所谓编程式 就是 到可能异常的地方 先捕获异常 然后 开启事务 执行成功的话 提交事务 如果被异常捕获 则回滚事务 这个的话 每个地方用一下 代码就会显得很笨重

而声明式事务 也有两种 实现方式 在我们学习Spring5 过程中 也是老朋友了 注解/xml 方式

而声明式底层管理中使用了我们前段时间认识的朋友 AOP 我喜欢大家不是渣男 用完之后还是要记得人家的啊
而在面试时 别人问你在Spring开发中 什么地方用到了aop 你可以说 声明式事务管理 用到了面向切面的原理

Spring事务操作 需要PlatformTransactionManager接口中的API PlatformTransactionManager接口 为不同操作数据库框架准备了不同的实现类

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/405783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue的路由配置(Vue2和Vue3的路由配置)

系列文章目录 Tips:使用Vue3开发项目已经有一段时间了,关于Vue2的路由是如何一步一步搭建的都快要忘记了,今天写着篇文章主要就是回顾一下,在Vue2和Vue3中我们是如何一步一步的配置路由的。 提示:最好的进步就是有闲暇…

如何知道你的推荐流每条数据是通过哪种策略召回?

大家好,我是空空star,本篇带你了解下C站PC首页推荐流召回策略。 文章目录前言一、utm_medium二、召回策略1.user_follow_bbs:用户关注社区的红包帖子召回2.user_follow:用户关注召回3.top_blink:热门blink召回4.hot&am…

滚动条样式修改

前言 浏览器中的滚动条样式大家一定都不陌生,其样式并不好康。可能很多小伙伴还不知道,这个东东的样式也可以修改(仅支持部分现代浏览器),本次就来带大家用 CSS 修改一下它的样式。 一、认识滚动条 首先我们先来简单…

(一)卷积神经网络模型之——LeNet

目录LeNet模型参数介绍该网络特点关于C3与S2之间的连接关于最后的输出层子采样参考LeNet LeNet是一个用来识别手写数字的最经典的卷积神经网络,是Yann LeCun在1998年设计并提出的。Lenet的网络结构规模较小,但包含了卷积层、池化层、全连接层&#xff0…

【前端进阶】-TypeScript高级类型 | 泛型约束、泛型接口、泛型工具类型

前言 博主主页👉🏻蜡笔雏田学代码 专栏链接👉🏻【TypeScript专栏】 前两篇文章讲解了TypeScript的一些高级类型 详细内容请阅读如下:🔽 【前端进阶】-TypeScript高级类型 | 交叉类型、索引签名类型、映射类…

直接在前端调用 GPT-3 API

〇、效果展示 一、代码&#xff1a;ask.html app.js ask.html&#xff08;内嵌css&#xff09; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>ChatGPT Web Example</title><style>/* 你的 CSS 代码 */bod…

CSS 轻松实现‘毛玻璃’效果

毛玻璃1. backdrop-filt 属性2. filter 属性3. backdrop-filter && filter4. 参考资料1. backdrop-filt 属性 通过为元素添加backdrop-filter:blur(模糊值) 这个 CSS 属性&#xff0c;元素所在的区域后方包括后方的其他元素会模糊或颜色有所偏移&#xff0c;元素本身包…

深拷贝的五种实现方式

一、什么是深拷贝和浅拷贝 浅拷贝是创建一个新对象&#xff0c;这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型&#xff0c;拷贝的就是基本类型的值&#xff0c;如果属性是引用类型&#xff0c;拷贝的就是指向内存的地址 &#xff0c;所以如果其中一个对象改变…

npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。

为了解决npm命令无法正常运行的问题 接上个博客 安装完新版node后使用npm命令会出现以下错误 大致意思就是识别不了npm命令是干啥的 解决方案: 1.首先确定是不是软件没有获得管理员权限运行,右键程序选择管理员权限运行 2.如果管理员权限运行后依然出现错误,检查node的配置…

React 框架

文章目录一、React 框架简介二、配置环境三、组件&#xff08;Component&#xff09;四、Component 组件的组合与交互一、React 框架简介 介绍 CS 与 BS结合&#xff1a;像 React&#xff0c;Vue 此类框架&#xff0c;转移了部分服务器的功能到客户端。将CS 和 BS 加以结合。客…

java简历项目经验案例(java简历项目经验怎么写)

如何描述项目经验-seo简历项目经验怎么&#xff1f;seo简历项目经验怎么写 写自己从事过的什么项目。写具体什么模块。如果没有就写自己能达到什么水平&#xff0c;能做出什么模块。 什么叫项目经验&#xff1f;什么叫项目经验?简历中的项目经验可以写些什么? 项目经验与工作…

flex布局之flex-direction

一、flex布局的原理 1,flex是”flexible Box”的缩写&#xff0c;意为”弹性布局”&#xff1b; 2.当我们为父盒子设为flex布局以后&#xff0c;子元素的float、clear和vertical-align属性将会失效。 言而简之&#xff1a;flex布局原理就是通过给父盒子添加flex属性&#xff0…

VUE项目部署

前端项目的部署 1.1 开发完的vue的项目 首先运行 以下命令 对项目进行打包 npm run build1.2 安装nginx服务器 ​ nginx是一款轻量级的Web服务器、反向代理服务器&#xff0c;由于它的内存占用少&#xff0c;启动极快&#xff0c;高并发能力强&#xff0c;在互联网项目中广泛…

若依RuoYi-Vue前后端项目启动流程

1.git找到RuoYi-Vue RuoYi-Vue: &#x1f389; 基于SpringBoot&#xff0c;Spring Security&#xff0c;JWT&#xff0c;Vue & Element 的前后端分离权限管理系统&#xff0c;同时提供了 Vue3 的版本 2.本地创建文件夹&#xff0c;cmd进入该文件夹下并进行克隆项目 git cl…

webpack安装与使用(详细)

一.什么是webpack? webpack是现代javascript应用程序的静态模块打包器&#xff0c;当 webpack 处理应用程序时&#xff0c;它会递归地构建一个依赖关系图(dependency graph)&#xff0c;其中包含应用程序需要的每个模块&#xff0c;然后将所有这些模块打包成一个或多个 bundl…

蓝桥杯第十四届蓝桥杯模拟赛第三期考场应对攻略(C/C++)

这里把我的想法和思路写出来&#xff0c;恳请批评指正&#xff01; 目录 考前准备 试题1&#xff1a; 试题2&#xff1a; 试题3&#xff1a; 试题4&#xff1a; 试题5&#xff1a; 试题6&#xff1a; 试题7&#xff1a; 试题8&#xff1a; 试题9&#xff1a; 试题1…

Vue开发实例(05)之搭建项目主页面头部、导航、主体等页面布局

作者简介 作者名&#xff1a;编程界明世隐 简介&#xff1a;CSDN博客专家&#xff0c;从事软件开发多年&#xff0c;精通Java、JavaScript&#xff0c;博主也是从零开始一步步把学习成长、深知学习和积累的重要性&#xff0c;喜欢跟广大ADC一起打野升级&#xff0c;欢迎您关注&…

【Node.js实战】一文带你开发博客项目(API 对接 MySQL)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端 &#x1f4c3;个人状态&#xff1a; 在校大学生一枚&#xff0c;已拿多个前端 offer&#xff08;秋招&#xff09; &#x1f680;未…

事件循环(Event Loop)

文章目录单线程事件循环机制&#xff08;Event Loop&#xff09;1、同步任务与异步任务同步任务异步任务宏任务微任务2、执行过程3、执行顺序4、举例&#xff1a;实例1实例2单线程 JavaScript是一种单线程的编程语言&#xff0c;同一时间只能做一件事&#xff0c;所有任务都需…

【Node.js实战】一文带你开发博客项目(MySQL基础)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端 &#x1f4c3;个人状态&#xff1a; 在校大学生一枚&#xff0c;已拿 offer&#xff08;秋招&#xff09; &#x1f947;推荐学习&…