当前位置: 首页 > news >正文

举例详细学习和分析后端业务逻辑代码开发思路

在此之前,先来补充一下上一篇文章的一点内容:上一篇文章点击此处详看

对于画线的这句话,来详细解释一下吧!

这里面说,对于service服务层,如果我们所需要实现的业务比较简单的话可以直接在...service接口里面将方法实现,而复杂的业务逻辑则需要另外加一个实现类...serviceImpl来实现对应的方法。

这里再补充一下:就是我们在后端代码编写的时候,Impl实现类并不是必须的,其实它只是起到一个使得我们写的业务逻辑代码更加清晰,不会使得方法看起来很复杂。

这里可以举一个简单的例子:

比如我们正在开发一个外卖管理平台,那么我们肯定需要将要出售的菜品展示给用户看,我们从平台管理者的角度看,最简单的业务就是对菜品的增删查改,而这个增删查改的逻辑其实都差不多,但它们都是属于对菜品的管理,四个功能需要四个方法来实现,那么我们在编写代码时,肯定先在controller控制层先响应请求,然后再到服务层来实现这几个方法,而在service服务层,我们如果要把四个方法都写在...service类里面的话,那就包括(实现方法的逻辑代码,sql的编写)对于sql的编写,若是简单的sql倒没什么,如果是比较复杂的动态sql,那么全部堆在这个service类里面,下次需要来修改什么功能的话会相当难找,还可能影响到其他的功能。而这时候我们就需要再加一个ImplService实现类,在service接口层里面单纯地定义方法,再将方法的具体实现代码编写到ImplService实现类里面,接着,将复杂的动态sql编写到xml文件里面。这样,如果我们需要修改哪个方法或sql语句,我们就随时可以定位到该位置快速修改,不会太冗杂。

当然,上面说了,并不是所有的业务逻辑都需要Impl实现类,就像上一篇文章里面的新增员工业务,单纯的实现这个功能只需要一句简单的sql语句,我们就不需要另开一个实现类去实现。

好了,进入正题,我们来分析学习下面的代码开放思路!

eg.这是一个关于删除的业务(删除套餐)

先对其进行需求分析:

业务规则:

  • 可以一次删除一个套餐,也可以批量删除套餐

  • 起售中的套餐不能删除

接口信息:

        Path: /admin/setmeal

        Method: DELETE

接口描述:

        请求参数:Query

                参数名称:ids       必须       

        返回数据:

                数据名称:code      非必须

                                  data       非必须

                                  msg       非必须

代码实现:controller—> service—> serviceImpl—> mapper—> (动态sql--mapper.xml)

SetmealController:
/*** 批量删除套餐* @param ids* @return
*/
@DeleteMapping
@ApiOperation("批量删除套餐")
public Result delete(@RequestParam List<Long> ids){setmealService.deleteBatch(ids);return Result.success();
}

首先,先编写Controller层,封装所需要的数据,其中ids,我们可以从上面的接口信息知道这是请求参数且是必须的,所以delete()括号中需要封装前端提交过来的请求参数,接着就需要一个根据ids删除的方法对吧(deleteBatch),我们可以先将其写出来,然后再到setmealService接口层去创建这个方法。最后返回响应结果。

SetmealService:
/*** 批量删除套餐* @param ids
*/
void deleteBatch(List<Long> ids);

SetmealService接口层,这里面单纯定义方法给Controller控制层调用实现删除功能。

而具体的实现逻辑是在实现类编写。

SetmealServiceImpl:
/*** 批量删除套餐* @param ids
*/
@Transactional
public void deleteBatch(List<Long> ids) {ids.forEach(id -> {Setmeal setmeal = setmealMapper.getById(id);if(StatusConstant.ENABLE == setmeal.getStatus()){//起售中的套餐不能删除throw new DeletionNotAllowedException(MessageConstant.SETMEAL_ON_SALE);}});ids.forEach(setmealId -> {//删除套餐表中的数据setmealMapper.deleteById(setmealId);//删除套餐菜品关系表中的数据setmealDishMapper.deleteBySetmealId(setmealId);});
}

SetmealServiceImpl就是所需的实现类,在里面编写删除方法的具体逻辑,其中,if条件语句是在判断要删除的套餐中是否有菜品正在起售,如果有则返回错误信息,没有则删除套餐中的数据和套餐菜品关系表中的数据。当然,这里没有展示套餐表和菜品表。理解其逻辑就行!接着,在这里面,要实现对套餐中菜品信息的遍历和删除,需要用到getById()和deteleById()以及deleteBySetmealId()3个方法。它们都将在mapper持久层中实现。

SetmealMapper:
/*** 根据id查询套餐* @param id* @return
*/
@Select("select * from setmeal where id = #{id}")
Setmeal getById(Long id);/*** 根据id删除套餐* @param setmealId
*/
@Delete("delete from setmeal where id = #{id}")
void deleteById(Long setmealId);

这是对套餐表进行查询和删除!这里我们可以看到,在方法上面直接进行sql的实现,这是因为这个业务删除的复杂度并不高,所以不需要用到动态sql,如果需要的话,会另外编写在XML文件中。

SetmealDishMapper:
/*** 根据套餐id删除套餐和菜品的关联关系* @param setmealId
*/
@Delete("delete from setmeal_dish where setmeal_id = #{setmealId}")
void deleteBySetmealId(Long setmealId);

这是对套餐菜品关系表进行数据的删除!

 大概的代码开发逻辑就是这样,意会意会!这也是对上一篇文章所说的业务逻辑代码开放思路的一个具体解释和举例!希望对你有帮助!

👍

相关文章:

举例详细学习和分析后端业务逻辑代码开发思路

在此之前&#xff0c;先来补充一下上一篇文章的一点内容&#xff1a;上一篇文章点击此处详看 对于画线的这句话&#xff0c;来详细解释一下吧&#xff01; 这里面说&#xff0c;对于service服务层&#xff0c;如果我们所需要实现的业务比较简单的话可以直接在...service接口里面…...

面试经典算法150题系列-数组/字符串操作之轮转数组

序言&#xff1a;今天是算法系列的第六题啦&#xff0c;无需多说&#xff0c;上题&#xff01; 轮转数组 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3…...

苹果手机怎么录屏?一键操作,轻松掌握录屏技巧

最近新换了一台苹果手机&#xff0c;但苹果手机和安卓手机有挺多不相同的地方&#xff0c;就比如苹果手机怎么录屏我一直都没找到&#xff0c;有没有经常使用苹果手机的朋友可以帮帮我&#xff1f;先谢谢大家啦&#xff01;” 苹果手机作为全球领先的智能手机品牌&#xff0c;…...

[Vue3] - 3 数据响应式

前言 在前端开发过程中,最为注重的就是数据的即时性和响应。但随着技术的发展vue2.0的数据响应方式,不能响应属性的新增和删除、以及通过数组下标修改界面不会自动更新等弊端逐渐显露。vue3.0为开发者提供了更为便捷的数据响应方式,接下来就让我们一起去探索一下。 目标 1 …...

【话题】“八股文”在实际工作中是助力、阻力还是空谈?

目录 前言 方向一&#xff1a;“八股文”对招聘过程的影响 方向二&#xff1a;“八股文”在日常工作中的实用价值 方向三&#xff1a;改进“八股文”学习和评估的方法 前言 在当今快速发展的信息技术领域&#xff0c;程序员的角色日益重要。随着技术的不断进步&#xff0c;…...

Windows 10 安装 WSL、安装 Go 以及配置环境变量的详细教程

安装 WSL 和 Ubuntu 启用 WSL 功能 以管理员身份打开 PowerShell。 运行以下命令以启用 WSL 功能&#xff1a; dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart启用虚拟机平台 继续在管理员 PowerShell 中运行以下命令以启…...

论文阅读:基于生物神经元的模拟游戏世界感知与学习

论文内容概述 AI要90分钟学会的游戏&#xff0c;人脑细胞竟在5分钟搞定了。Cell在2022年的研究中&#xff0c;使用80万体外神经元细胞(DishBrain)竟然学会玩70年代经典街机游戏Pong&#xff01; 论文链接&#xff1a;In vitro neurons learn and exhibit sentience when emb…...

理解最先进模型的起点GPT-2 源码 配置的解释

理解最先进模型的起点GPT-2 源码 配置的解释 flyfish 为训练GPT模型设置和管理配置参数、日志记录以及实验的可重复性 理解最先进模型的起点GPT-2 理论知识 理解最先进模型的起点GPT-2 源码 注释 模型部分(from mingpt.model) utils.py import os import sys import json im…...

C++11 可变参数模板

C11的新特性可变参数模板能够创建可以接受可变参数的函数模板和类模板&#xff0c;相比C98/03&#xff0c;类模版和函数模版中只能含固定数量的模版参数&#xff0c;可变模版参数无疑是一个巨大的改进。然而由于可变模版参数比较抽象&#xff0c;使用起来需要一定的技巧&#x…...

项目实战——外挂开发(30小时精通C++和外挂实战)

项目实战——外挂开发&#xff08;30小时精通C和外挂实战&#xff09; 外挂开发1-监控游戏外挂开发2-秒杀僵尸外挂开发3-阳光地址分析外挂开发4-模拟阳光外挂开发5-无限阳光 外挂开发1-监控游戏 外挂的本质 有两种方式 1&#xff0c;修改内存中的数据 2&#xff0c;更改内存中…...

【人工智能专栏】Constructive损失解析

Constructive Loss 相比较于 MSE Loss \text{MSE Loss} MSE Loss 和 MAE Loss \text{MAE Loss} MAE Loss 直接将结果与目标数值比较的做法,使用 Constru...

PHP经销商订货管理系统小程序源码

经销商订货管理系统&#xff1a;重塑供应链效率的利器 &#x1f680; 开篇&#xff1a;解锁供应链管理的新纪元 在竞争激烈的商业环境中&#xff0c;经销商作为供应链的关键一环&#xff0c;其订货效率直接影响到整个供应链的流畅度和响应速度。传统的订货方式往往繁琐、易出…...

【网络世界】HTTPS协议

目录 &#x1f308;前言&#x1f308; &#x1f4c1; HTTP缺陷 &#x1f4c1; HTTPS &#x1f4c2; 概念 &#x1f4c2; 加密 &#x1f4c2; 加密方式 &#x1f4c1; 中间人攻击 &#x1f4c1; CA机构和证书 &#x1f4c2; 数据摘要&#xff08;数据指纹&#xff09; &…...

根据空域图信息构造飞机航线图以及飞行轨迹模拟matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 航路网络建模 4.2 航线图构建 4.3 飞行轨迹模拟的具体步骤 5.完整程序 1.程序功能描述 空域图是指航空领域中的一种图形表示方式&#xff0c;它涵盖了空中交通管理所需要的各种信息&a…...

llama-factory 系列教程 (五),SFT 微调后的模型,结合langchain进行推理

背景 微调了一个 glm4-9B的大模型。微调后得到Lora权重&#xff0c;部署成vllm 的API&#xff0c;然后通过langchain接入完成相关任务的推理。 关于SFT 微调模型的部分就不做介绍了&#xff0c;大家可以参考前面的文章&#xff0c;将自己的数据集 在 Llamafactory 的 dataset…...

hive 中编写生成连续月sql

记录一下 sql 编写生成从一个确定的起始月份到当前月份的连续月份序列 SELECT substr(add_months(table1.start_dt,table2.pos),1,4) AS INDICT_YEAR,substr(add_months(table1.start_dt,table2.pos),1,7) AS INDICT_MON FROM (SELECT 2024-01-01 AS start_dt,substr(CURRE…...

前端开发实用的网站合集

文章目录 一、技能提升篇vueuseJavaScript中文网JavaScript.infoRxJsWeb安全学习书栈网码农之家 二、UI篇iconfont&#xff1a;阿里巴巴矢量图标库IconPark3dicons美叶UndrawError 404摹克 三、CSS篇You-need-to-know-cssCSS TricksAnimate.cssCSS ScanCSS Filter 四、颜色篇中…...

蓄势赋能 数智化转型掌舵人百望云杨正道荣膺“先锋人物”

2024年&#xff0c;在数据与智能的双涡轮驱动下&#xff0c;我们迎来了一个以智能科技为核心的新质生产力大爆发时代。在数智化浪潮的推动下&#xff0c;全球企业正站在转型升级的十字路口。在这个充满变革的时代&#xff0c;企业转型升级的道路充满挑战&#xff0c;但也孕育着…...

(七)前端javascript中的函数式编程技巧2

函数式编程范式的技巧 迭代算法-可以替代for in let count 10;while (count--) {console.log(count); }斐波拉契的实现 function fabci(n) {console.log("&#x1f680; ~ fabci ~ n:", n);if (n 1 || n 2) {return 1;}return fabci(n - 1) fabci(n - 2);}cons…...

LeetCode热题 翻转二叉树、二叉树最大深度、二叉树中序遍历

目录 一、翻转二叉树 1.1 题目链接 1.2 题目描述 1.3 解题思路 二、二叉树最大深度 2.1 题目链接 2.2 题目描述 2.3 解题思路 三、二叉树中序遍历 3.1 题目链接 3.2 题目描述 3.3 解题思路 一、翻转二叉树 1.1 题目链接 翻转二叉树 1.2 题目描述 1.3 解题思路 根…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...