SpringBoot修改菜品模块开发

news2025/2/23 22:23:02

需求分析与设计

一:产品原型

在菜品管理列表页面点击修改按钮,跳转到修改菜品页面,在修改页面回显菜品相关信息并进行修改,最后点击保存按钮完成修改操作。

修改菜品原型:

二:接口设计

通过对上述原型图进行分析,该页面共涉及4个接口。

接口:

  • 根据id查询菜品(用于回显菜品信息)

  • 根据类型查询分类(已实现)

  • 文件上传(已实现)

  • 修改菜品

我们只需要实现根据id查询菜品修改菜品两个接口,接下来,我们来重点分析这两个接口。

  1). 根据id查询菜品

2). 修改菜品

代码开发

一:Controller层

    /**
     * 根据id查询菜品
     *
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    @ApiOperation("根据id查询菜品")
    public Result<DishVO> getById(@PathVariable Long id) {
        log.info("根据id查询菜品:{}", id);
        DishVO dishVO = dishService.getByIdWithFlavor(id);//后绪步骤实现
        return Result.success(dishVO);
    }
	/**
     * 修改菜品
     *
     * @param dishDTO
     * @return
     */
    @PutMapping
    @ApiOperation("修改菜品")
    public Result update(@RequestBody DishDTO dishDTO) {
        log.info("修改菜品:{}", dishDTO);
        dishService.updateWithFlavor(dishDTO);
        return Result.success();
    }

二:Service层

	/**
     * 根据id查询菜品和对应的口味数据
     *
     * @param id
     * @return
     */
    public DishVO getByIdWithFlavor(Long id) {
        //根据id查询菜品数据
        Dish dish = dishMapper.getById(id);

        //根据菜品id查询口味数据
        List<DishFlavor> dishFlavors = dishFlavorMapper.getByDishId(id);//后绪步骤实现

        //将查询到的数据封装到VO
        DishVO dishVO = new DishVO();
        BeanUtils.copyProperties(dish, dishVO);
        dishVO.setFlavors(dishFlavors);

        return dishVO;
    }

	/**
     * 根据id修改菜品基本信息和对应的口味信息
     *
     * @param dishDTO
     */
    public void updateWithFlavor(DishDTO dishDTO) {
        Dish dish = new Dish();
        BeanUtils.copyProperties(dishDTO, dish);

        //修改菜品表基本信息
        dishMapper.update(dish);

        //删除原有的口味数据
        dishFlavorMapper.deleteByDishId(dishDTO.getId());

        //重新插入口味数据
        List<DishFlavor> flavors = dishDTO.getFlavors();
        if (flavors != null && flavors.size() > 0) {
            flavors.forEach(dishFlavor -> {
                dishFlavor.setDishId(dishDTO.getId());
            });
            //向口味表插入n条数据
            dishFlavorMapper.insertBatch(flavors);
        }
    }

三:Mapper层

    /**
     * 根据菜品id查询对应的口味数据
     * @param dishId
     * @return
     */
    @Select("select * from dish_flavor where dish_id = #{dishId}")
    List<DishFlavor> getByDishId(Long dishId);
<update id="update">
        update dish
        <set>
            <if test="name != null and name != ''">name = #{name},</if>
            <if test="categoryId != null and categoryId != ''">category_id = #{categoryId},</if>
            <if test="price != null and price != ''">price = #{price},</if>
            <if test="image != null and image != ''">image = #{image},</if>
            <if test="description != null and description != ''">description = #{description},</if>
            <if test="status != null and status != ''">status = #{status},</if>
            <if test="updateTime != null ">update_time = #{updateTime},</if>
            <if test="updateUser != null ">update_user = #{updateUser},</if>
        </set>
        where id = #{id}
    </update>

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

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

相关文章

linux系统离线安装nginx

介绍&#xff1a;nginx是一个高性能的http和反向代理服务器&#xff0c;并发能力很强&#xff0c;一般用来做负载均衡比较多&#xff0c;日常开发中用作web服务器 说明&#xff1a;本文用到的所有资源&#xff0c;笔者已经打包上传了&#xff0c;需要下载的请于文章顶部下载 …

【PDF技巧】带有限制编辑的PDF文件,如何编辑?

PDF文件打开之后发现设置了限制编辑&#xff0c;功能栏中的编辑按钮都是灰色的&#xff0c;导致PDF文件里的内容无法编辑。那么带有限制编辑的PDF文件&#xff0c;如何编辑&#xff1f;今天分享两个方法。 方法一&#xff1a; 我们可以将PDF文件转换成其他格式&#xff0c;有…

损失函数:BCE Loss(二元交叉熵损失函数)、Dice Loss(Dice相似系数损失函数)

损失函数&#xff1a;BCE Loss&#xff08;二元交叉熵损失函数&#xff09;、Dice Loss&#xff08;Dice相似系数损失函数&#xff09; 前言相关介绍BCE Loss&#xff08;二元交叉熵损失函数&#xff09;代码实例直接计算函数计算 Dice Loss&#xff08;Dice相似系数损失函数&a…

【讲解下常见的分类算法】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

医疗器械UDI码的DI和PI什么意思

一、理解医疗器械UDI 医疗器械的UDI码是Unique Device Identifier Code的缩写&#xff0c;意为唯一设备识别码。 医疗器械的UDI码是唯一设备识别码&#xff0c;由两个部分组成&#xff1a;DI和PI。 1.1、DI 理解 DI&#xff08;Device Identifier&#xff0c;设备标识符&am…

STM32F407单片机通用24CXXX读写程序(KEIL),兼容24C系列存储器(24C01到24C512),支持存储器任意地址跨页连续读写多个页

STM32F407单片机通用24CXXX读写程序&#xff08;KEIL&#xff09;&#xff0c;兼容24C系列存储器&#xff08;24C01到24C512&#xff09;&#xff0c;支持存储器任意地址跨页连续读写多个页 Chapter1 STM32F407单片机通用24CXXX读写程序&#xff08;KEIL&#xff09;&#xff0…

「每日跟读」英语常用句型公式 第9篇

「每日跟读」英语常用句型公式 第9篇 1. Go-to ___ 第一选择___ What’s your go-to snack when you’re hungry? (你饿的时候第一选择的零食是什么&#xff1f;) Who’s your go-to friend for advice? (你第一选择的朋友是谁来寻求建议&#xff1f;) Which is your go-t…

子域名是什么?有什么作用?

在互联网世界中&#xff0c;域名是我们访问网站的关键。每一个公司的网站都需要拥有自己的域名&#xff0c;其中有些大型公司的网站还不止一个域名&#xff0c;除了主域名外还拥有子域名。有些人感到非常困惑&#xff0c;不知道子域名是什么。其实子域名也就是平时所说的二级域…

MapReduce过程解析

一、Map过程解析 Read阶段&#xff1a;MapTask通过用户编写的RecordReader&#xff0c;从输入的InputSplit中解析出一个个key/value。Map阶段&#xff1a;将解析出的key/value交给用户编写的Map()函数处理&#xff0c;并产生一系列的key/value。Collect阶段&#xff1a;在用户编…

YOLOv5实例分割

目录 一,准备工作 1.1 标签数据解释: 1.2 数据集格式转换方法汇总 图片和JSON在一个文件夹的形式,通过下面的代码会再相同文件夹下生成对应的txt文件 方式2: 二,训练、测试、检测 一,准备工作 用conda创建自己的环境 安装项目路径下的requirements.txt 数据集准备…

Socks5代理IP使用教程

当我们在互联网上浏览网页、下载文件或者进行在线活动时&#xff0c;隐私和安全问题常常被提及。在这样的环境下&#xff0c;一个有效的解决方案是使用Sock5IP。本教程将向您介绍Sock5IP的使用方法&#xff0c;帮助您保护个人隐私并提升网络安全。 一、什么是Sock5IP&#xff1…

SpringMVC中拦截所有请求后,<mvc:resources/>不起作用

报错显示 出现这种问题的前提是&#xff0c;用DispatcherServlet将所有的请求拦截&#xff0c;然后导致静态资源无法访问。 拦截代码如下&#xff0c;配置卸载web.xml文件中。 <servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class&…

4月11号总结

java学习 一.io流 简介&#xff1a;io&#xff0c;i代表in&#xff0c;指的是输入&#xff0c;o代表输出。io流是用于处理输入和输出数据的机制。Java的io流主要分为字节流和字符流两种类型。这些流可以用于读取和写入不同类型的数据&#xff0c;如文本&#xff0c;图片&#…

【MATLAB 预测算法教程】_1粒子群算法优化BP神经网络预测 - 教程和对应MATLAB代码

本文以MATLAB自带的脂肪数据集为例,将数据保存在EXCEL工作簿内,方便替换数据使用,以下介绍粒子群算法优化BP神经网络预测的MATLAB代码编写,主要流程包括1. 读取数据 2.划分训练集和测试集 3.归一化 4.确定BP神经网络的隐含层最优节点数量 5. 使用粒子群算法优化BP的神经网络…

C++模板初阶(个人笔记)

模板初阶 1.泛型编程2.函数模板2.1函数模板的实例化2.2模板参数的匹配规则 3.类模板3.1类模板的实例化 1.泛型编程 泛型编程&#xff1a;编写与类型无关的通用代码&#xff0c;是代码复用的一种手段。模板是泛型编程的基础。 //函数重载 //交换函数的逻辑是一致的&#xff0c…

探索设计模式的魅力:MVVM模式在AI大模型领域的创新应用-打破传统,迎接智能未来

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 MVVM模式在AI大模型领域的创新应用-打破传统迎接智能未来 &#x1f680; “在人工智能的领域里&a…

实验8 内置对象session

一、实验目的 掌握怎样在JSP中使用内置对象session 二、实验项目内容&#xff08;实验题目&#xff09; 编写代码&#xff0c;掌握session的用法。【参考课本4.6.5 】 三、源代码以及执行结果截图&#xff1a; choiceGrade.jsp <% page language"java" content…

顺序表实战——基于顺序表的通讯录

前言&#xff1a;本篇文章主要是利用顺序表作为底层&#xff0c; 实现一个通讯录。偏向于应用&#xff0c; 对于已经学习过c的友友们可能没有难度了已经。没有学习过c的友友&#xff0c; 如果顺序表不会写&#xff0c; 或者说没有自己实现过&#xff0c; 请移步学习顺序表相关内…

代码随想录算法训练营Day14|二叉树理论基础和递归遍历

代码随想录卡哥视频 理论基础 需要了解 二叉树的种类&#xff0c;存储方式&#xff0c;遍历方式 以及二叉树的定义 文章讲解&#xff1a;代码随想录 递归遍历 &#xff08;必须掌握&#xff09; 二叉树的三种递归遍历掌握其规律后&#xff0c;其实很简单 题目链接/文章讲解/…

vue快速入门(十四)reduce求和

注释很详细&#xff0c;直接上代码 上一篇 新增内容 非嵌套情况求和嵌套情况求和 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initia…