8--苍穹外卖-SpringBoot项目中套餐管理 详解(二)
目录
删除套餐
需求分析和设计
代码开发
根据id查询套餐
mapper层
Service层
ServiceImpl层
Mapper层
批量删除套餐
mapper层
Service层
ServiceImpl层
Mapper层
SetmealMapper.xml
修改套餐
需求分析和设计
代码开发
起售停售套餐
需求分析和设计
代码开发
1--苍穹外卖-SpringBoot项目介绍及环境搭建 详解-CSDN博客
2--苍穹外卖-SpringBoot项目中员工管理 详解(一)-CSDN博客
3--苍穹外卖-SpringBoot项目中员工管理 详解(二)-CSDN博客
4--苍穹外码-SpringBoot项目中分类管理 详解-CSDN博客
5--苍穹外卖-SpringBoot项目中菜品管理 详解(一)-CSDN博客
6--苍穹外卖-SpringBoot项目中菜品管理 详解(二)-CSDN博客
7--苍穹外卖-SpringBoot项目中套餐管理 详解(一)-CSDN博客
8--苍穹外卖-SpringBoot项目中套餐管理 详解(二)-CSDN博客
9--苍穹外卖-SpringBoot项目中Redis的介绍及其使用实例 详解-CSDN博客
10--苍穹外卖-SpringBoot项目中微信登录 详解-CSDN博客
删除套餐
需求分析和设计
业务规则:
-
可以一次删除一个套餐,也可以批量删除套餐
-
起售中的套餐不能删除
-
删除套餐后,菜品的关联数据也需要删除掉




代码开发
根据id查询套餐
mapper层
//根据id查询套餐@GetMapping("/{id}")@ApiOperation("根据id查询套餐")public Result<SetmealVO> getById(@PathVariable Long id){log.info("根据id查询套餐:{}",id);SetmealVO setmealVO=setmealService.getByIdWithDish(id);return Result.success(setmealVO);}
Service层
//根据id查询套餐SetmealVO getByIdWithDish(Long id);
ServiceImpl层
//根据id查询套餐@Overridepublic SetmealVO getByIdWithDish(Long id) {Setmeal setmeal=setmealMapper.getById(id);List<SetmealDish> setmealDishes=setmealDishMapper.getDishId(id);SetmealVO setmealVO = new SetmealVO();BeanUtils.copyProperties(setmeal,setmealVO);setmealVO.setSetmealDishes(setmealDishes);return setmealVO;}
Mapper层
//根据id查询套餐@Select("select *from setmeal where id=#{id}")Setmeal getById(Long id);
//根据id查询对应的菜品数据@Select("select *from setmeal_dish where setmeal_id=#{dishId}")List<SetmealDish> getDishId(Long dishId);
批量删除套餐
mapper层
//批量删除套餐@DeleteMapping@ApiOperation("批量删除套餐")public Result<String> delete(@RequestParam List<Long> ids){log.info("批量删除套餐:{}",ids);setmealService.deleteBatch(ids);return Result.success();}
Service层
//批量删除套餐void deleteBatch(List<Long> ids);
ServiceImpl层
//批量删除套餐@Override@Transactionalpublic void deleteBatch(List<Long> ids) {for (Long id:ids){Setmeal setmeal=setmealMapper.getById(id);if (Objects.equals(setmeal.getStatus(), StatusConstant.ENABLE)) {throw new DeletionNotAllowedException(MessageConstant.SETMEAL_ON_SALE);}}setmealMapper.deleteByIds(ids);setmealMapper.deleteByDishIds(ids);}
Mapper层
//根据id集合批量删除套餐数据void deleteByIds(List<Long> ids);//根据id集合批量删除套餐关联的菜品数据void deleteByDishIds(List<Long> ids);
SetmealMapper.xml
<delete id="deleteByIds">
delete from setmeal where id in<foreach collection="ids" open="(" separator="," close=")" item="id">#{id}</foreach></delete><delete id="deleteByDishIds">delete from setmeal_dish where setmeal_id in <foreach collection="dishIds" open="(" close=")" separator="," item="dishId">#{dishId}</foreach></delete>
修改套餐
需求分析和设计




代码开发
Controller层
//修改套餐@PutMapping@ApiOperation("修改套餐")public Result<String> update(@RequestBody SetmealDTO setmealDTO){log.info("修改套餐:{}",setmealDTO);setmealService.update(setmealDTO);return Result.success();}
Service层
//修改套餐void update(SetmealDTO setmealDTO);
ServiceImpl层
//修改套餐@Overridepublic void update(SetmealDTO setmealDTO) {Setmeal setmeal = new Setmeal();BeanUtils.copyProperties(setmealDTO,setmeal);setmealMapper.update(setmeal);setmealDishMapper.deleteByDishId(setmealDTO.getId());List<SetmealDish> setmealDishes = setmealDTO.getSetmealDishes();if(setmealDishes!=null&&!setmealDishes.isEmpty()){setmealDishes.forEach(setmealDish -> {setmealDish.setSetmealId(setmealDTO.getId());});setmealDishMapper.insertBatch(setmealDishes);}}
Mapper层
//根据id动态修改套餐数据@AutoFill(value = OperationType.UPDATE)void update(Setmeal setmeal);
//根据套餐id删除对应的菜品数据@Delete("delete from setmeal_dish where setmeal_id=#{dishId}")void deleteByDishId(Long dishId);
SetmealMapper.xml
<update id="update">update dish<set><if test="name!=null">name=#{name},</if><if test="categoryId!=null">category_id=#{categoryId},</if><if test="price!=null">price=#{price},</if><if test="image!=null">image=#{image},</if><if test="description!=null">description=#{description},</if><if test="status!=null">status=#{status},</if><if test="updateTime!=null">update_time=#{updateTime},</if><if test="updateUser!=null">update_user=#{updateUser},</if></set>where id=#{id}</update>
起售停售套餐
需求分析和设计
业务规则:
- 可以对状态为“启售” 的套餐进行“停售”操作
- 可以对状态为“停售”的套餐进行“启售”操作
- 状态为“停售”的套餐不在前台展示


代码开发
Controller层
//起售禁售套餐@PostMapping("/status/{status}")@ApiOperation("起售禁售套餐")public Result<String> startOrStop(@PathVariable Integer status,Long id){log.info("起售禁售套餐:{},{}",status,id);setmealService.startOrStop(status,id);return Result.success();}
Service层
//起售禁售套餐void startOrStop(Integer status, Long id);
ServiceImpl层
//起售禁售套餐@Overridepublic void startOrStop(Integer status, Long id) {Setmeal setmeal = Setmeal.builder().status(status).id(id).build();setmealMapper.update(setmeal);}相关文章:
8--苍穹外卖-SpringBoot项目中套餐管理 详解(二)
目录 删除套餐 需求分析和设计 代码开发 根据id查询套餐 mapper层 Service层 ServiceImpl层 Mapper层 批量删除套餐 mapper层 Service层 ServiceImpl层 Mapper层 SetmealMapper.xml 修改套餐 需求分析和设计 代码开发 起售停售套餐 需求分析和设计 代码开发…...
测试面试题:pytest断言时,数据是符点类型,如何断言?
在使用 Pytest 进行断言时,如果数据是浮点类型,可以使用以下方法进行断言: 一、使用pytest.approx pytest.approx可以用来比较两个浮点数是否近似相等。例如: import pytestdef test_float_assertion():result 3.14159expecte…...
Python与MongoDB交互
一、基本概念 MongoDB: 一个面向文档的数据库系统,使用BSON(Binary JSON)作为存储格式。集合(Collection): 类似于关系型数据库中的表,是文档的集合。文档(Document): MongoDB中的基…...
安卓AI虚拟女友项目开发的Android开发环境搭建
第五章:Android开发环境搭建与基础入门 5-1 项目讲解思路说明 本文是安卓AI数字虚拟人项目实战的第五章,开发安卓AI安卓版数字虚拟人的Android基础部分。 在本章中,我们将详细介绍如何搭建Android开发环境,包括Android Studio的…...
基于SpringBoot+Vue+MySQL的智能垃圾分类系统
系统展示 用户前台界面 管理员后台界面 系统背景 随着城市化进程的加速,垃圾问题日益凸显,不仅对环境造成污染,也给城市管理带来了巨大挑战。传统的垃圾分类方式不仅费时费力,而且手工操作容易出现错误,导致垃圾分类效…...
你的个人文件管理助手:AI驱动的本地文件整理工具
🌐 引言 在数字化时代,我们经常面临文件管理的挑战。电脑中的文件杂乱无章,寻找特定文件变得既费时又费力。幸运的是,现在有了一款名为本地文件整理器的神器,它利用AI技术帮助你快速、智能地整理文件,同时…...
【PyTorch】环境配置
框架介绍 Pytorch简介 2017年1月,FAIR(Facebook AI Research)发布了PyTorch。PyTorch是在Torch基础上用python语言重新打造的一款深度学习框架。Torch是采用Lua语言作为接口的机器学习框架,但因为Lua语言较为小众,导…...
枫叶MTS格式转换器- 强大、操作简单的MTS、M2TS视频转换工具供大家学习研究参考
一款功能强大、操作简单的MTS、M2TS视频转换工具,欢迎下载使用。 使用本MTS格式转换器可以帮助您将索尼和松下等摄像机录制的MTS、M2TS格式高清视频转换为其他流行的视频格式,如MP4、3GP、AVI、MPEG、WMV、ASF、MOV、RM、VCD、SVCD、DVD、MKV、FLV、SWF、MPG、MP3、WAV、WMA…...
Vscode把全部‘def‘都收起来的快捷键
在 VSCode 中,你可以使用以下快捷键来收起所有函数定义 (def): Windows/Linux: Ctrl K, Ctrl 0macOS: Cmd K, Cmd 0 这个快捷键组合会折叠当前文件中所有的代码块(包括所有函数和类定义)。你可以通过相同的快捷键再次展开这…...
Web和UE5像素流送、通信教程
一、web端配置 首先打开Github地址:https://github.com/EpicGamesExt/PixelStreamingInfrastructure 找到自己虚幻引擎对应版本的项目并下载下来,我这里用的是5.3。 打开项目找到PixelStreamingInfrastructure-master > Frontend > implementat…...
【YOLO目标检测电梯间电动车与人数据集】共4321张、已标注txt格式、有训练好的yolov5的模型
目录 说明图片示例 说明 数据集格式:YOLO格式 图片数量:4321 标注数量(txt文件个数):4321 标注类别数:2 标注类别名称:person、electricBicycle 数据集下载:电梯间电动车与人数据集 图片示例 数据…...
【网络安全】公钥基础设施
1. PKI 定义 1.1 公钥基础设施的概念 公钥基础设施(Public Key Infrastructure,简称PKI)是一种基于公钥密码学的系统,它提供了一套完整的解决方案,用于管理和保护通过互联网传输的信息。PKI的核心功能包括密钥管理、…...
云原生(四十一)| 阿里云ECS服务器介绍
文章目录 阿里云ECS服务器介绍 一、云计算概述 二、什么是公有云 三、公有云优缺点 1、优点 2、缺点 四、公有云品牌 五、市场占有率 六、阿里云ECS概述 七、阿里云ECS特点 阿里云ECS服务器介绍 一、云计算概述 云计算是一种按使用量付费的模式,这种模式…...
计算机网络:计算机网络体系结构 —— OSI 模型 与 TCP/IP 模型
文章目录 计算机网络体系结构OSI 参考模型TCP/IP 参考模型分层的必要性物理层的主要问题数据链路层的主要问题网络层的主要问题运输层的主要问题应用层的主要问题 分层思想的处理方法发送请求路由器转发接受请求发送响应接收响应 计算机网络体系结构 计算机网络体系结构是指将…...
【openwrt-21.02】T750 openwrt switch划分VLAN之后网口插拔状态异常问题分析及解决方案
Openwrt版本 NAME="OpenWrt" VERSION="21.02-SNAPSHOT" ID="openwrt" ID_LIKE="lede openwrt" PRETTY_NAME="OpenWrt 21.02-SNAPSHOT" VERSION_ID="21.02-snapshot" HOME_URL="https://openwrt.org/" …...
C++随心记
C随心记 C中的 CONST C中的const是表示不可修改 int main() {/* 对于变量而言 */// 不可修改的常量const int A 10;// 不可修改的指针指向const int* pointer_0 nullptr;int const* poniter_1 nullptr;// 不可修改指针指向的内容int* const poniter_2 nullptr; }const也…...
【微服务即时通讯系统】——brpc远程过程调用、百度开源的RPC框架、brpc的介绍、brpc的安装、brpc使用和功能测试
文章目录 brpc1. brpc的介绍1.1 rpc的介绍1.2 rpc的原理1.3 grpc和brpc 2. brpc的安装3. brpc使用3.1 brpc接口介绍 4. brpc使用测试4.1 brpc同步和异步调用 brpc 1. brpc的介绍 1.1 rpc的介绍 RPC(Remote Procedure Call)远程过程调用,是一…...
鸿蒙开发(NEXT/API 12)【状态查询与订阅】手机侧应用开发
注意 该接口的调用需要在开发者联盟申请设备基础信息权限与穿戴用户状态权限,穿戴用户状态权限还需获得用户授权。 实时查询穿戴设备可用空间、电量状态。订阅穿戴设备连接状态、低电量告警、用户心率告警。查询和订阅穿戴设备充电状态、佩戴状态、设备模式。 使…...
vite中sass警告JS API过期
1.问题 在Vite创建项目中引入Sass弹出The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0 - vite中sass警告JS API过期 The legacy JS API is deprecated and will be removed in Dart Sass 2.0.0警告提示表明你当前正在使用的 Dart Sass 版本中&#…...
睢宁自闭症寄宿学校:培养特殊孩子的未来
在自闭症儿童的教育与康复领域,每一所学校的努力都是对孩子们未来无限可能的一次深刻诠释。从江苏睢宁到广东广州,自闭症寄宿学校正以不同的方式,为这些特殊的孩子铺设一条通往未来的希望之路。其中,广州的星贝育园自闭症儿童寄宿…...
终极Markdown Viewer:5分钟打造你的浏览器技术文档阅读器
终极Markdown Viewer:5分钟打造你的浏览器技术文档阅读器 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer 你是否厌倦了在浏览器中查看Markdown文件时格式混乱的体验&a…...
PlugY完整指南:暗黑破坏神2终极单机优化解决方案
PlugY完整指南:暗黑破坏神2终极单机优化解决方案 【免费下载链接】PlugY PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction 项目地址: https://gitcode.com/gh_mirrors/pl/PlugY PlugY是《暗黑破坏神2:毁灭之王》最强大的单…...
Anthropic Economic Index: AI对软件开发的影响 — 深度解读
原文: AI’s impact on software development 发布机构: Anthropic 解读日期: 2026年3月25日 一、研究背景与方法论 1.1 研究动机 软件开发工作虽然在现代经济中占比较小,但影响力巨大。过去两年,能够辅助甚至自动化大量编程工作的AI系统的引入&#x…...
Python从入门到精通(05章):类与对象结构
Python从入门到精通(第05章):条件判断与分支结构 开头导语 这是本系列第05章。本文采用“知识点讲解 错误示例 正确写法 自测清单”的结构,目标是让你不仅能看懂,还能独立写出可运行代码。建议你边看边敲࿰…...
【PyTorch 3.0终极性能开关】:静态图分布式训练源码级调优指南——绕过Autograd重写、规避TensorGuard冗余拷贝、精准控制Fusion边界
第一章:PyTorch 3.0静态图分布式训练架构概览PyTorch 3.0 引入了原生静态图(Static Graph)支持,通过 TorchDynamo Inductor 的编译栈实现高性能图优化,并与分布式训练深度协同。该架构将模型定义、图捕获、分区调度与…...
CYBER-VISION零号协议SolidWorks设计文档智能解读与生成
CYBER-VISION零号协议:让AI读懂你的SolidWorks设计图 每次打开一个复杂的SolidWorks装配体文件,面对几十上百个零件,你是不是也头疼过整理物料清单、编写设计说明?或者,当同事发来一份设计文档,你需要花半…...
解放你的音乐库:NCMconverter音频格式转换全攻略
解放你的音乐库:NCMconverter音频格式转换全攻略 【免费下载链接】NCMconverter NCMconverter将ncm文件转换为mp3或者flac文件 项目地址: https://gitcode.com/gh_mirrors/nc/NCMconverter 当你下载了喜爱的音乐却发现是无法播放的NCM格式时,当你…...
商家客服智能管理系统架构设计与性能优化实战
商家客服智能管理系统架构设计与性能优化实战 面对电商大促期间海量用户的咨询涌入,传统的客服系统往往不堪重负。我记得去年双十一,我们团队维护的客服系统就经历了严峻考验:页面响应时间从平时的200ms飙升到2秒以上,大量用户排队…...
【C++ 多线程实战精讲】std::thread 线程创建 / 传参 / 同步 / 智能指针 / 生命周期管理
前言C11 正式推出了标准多线程库 <thread>,让跨平台多线程开发变得简单高效。但多线程的坑非常多:线程传参、对象生命周期、数据竞争、锁使用、指针悬空、析构崩溃……本文基于完整可运行工程代码,带你彻底掌握:线程创建、j…...
联邦学习与差分隐私:如何在MXNet中实现安全的深度学习训练
联邦学习与差分隐私:如何在MXNet中实现安全的深度学习训练 在当今数据驱动的AI时代,保护用户隐私和数据安全已成为深度学习框架必须面对的重要挑战。MXNet作为Apache基金会旗下高效的深度学习框架,通过集成联邦学习和差分隐私技术࿰…...
