springboot项目学习-瑞吉外卖(4)续

1.任务

  • 菜品的添加功能(涉及到两张表的数据添加)

2.菜品添加

功能页面如上,该页面有两个注意点

  1. 菜品分类:点击菜品分类后,会展示当前已有菜品:这个功能的实现要从category表里查询数据,然后再做展示
  2. 口味做法配置:口味的添加涉及到了另一张表dish_flavor,添加的口味需要存放在这张表里

2.1.菜品分类

在add.html文件中,有getDishList函数,里面的getCategoryList函数的函数体在food.js中向服务端发送了Ajax请求,并且还传了一个type作为参数(type为1表示是菜品,type为2表示是套餐)

 2.1.1.CategoryMapper.xml

<select id="selectDishByType" resultType="category">
        select * from category where type = #{type}
    </select>

service层的代码省略

2.1.2.CategoryController 

//展示菜品分类
@GetMapping("/list")
public R<List<Category>> selectDishByType(Category category){
    List<Category> dishList = categoryService.selectDishByType(category);
    return R.success(dishList);
}

注意:返回类型是List集合,因为前端接收服务端传来的数据时用的是数组类型,如下:

2.2口味做法配置

当点击保存按钮之后,前端会发送如下请求

 

上述页面中的数据,除了口味做法配置中的数据会存放在dish_flavor表中,剩下的数据都会存放在dish表中,如何请求一次服务端同时操作两张表呢?

  • 在这里给出的做法很简单,在FlavorMapper.xml中编写插入dish_flavor表的SQL语句,在DishMappr.xml中编写插入dish表的SQL语句,各写各的,但是最后都在DishServiceImpl实现类中调用上面两个方法,完成向两张表插入数据
  • 还有一个问题,前端给服务端返回Json格式的数据,我们改用什么类型的参数来接收呢?答案是dto类型(data transfer object数据传输对象),在这个类中既封装了dish类的数据,又封装了dish_flavor类的数据

2.2.1.DishDto实体类

public class DishDto extends Dish {

    //将前端获取到的值封装到flavors中
    private List<DishFlavor> flavors = new ArrayList<>();
}

2.2.2.DishServiceImpl

@Override
    public void addDish(DishDto dishDto) {

        DishFlavor dishFlavor = new DishFlavor();
        //获取菜品id,为填写dish_id做准备
        Long id = dishDto.getId();
        dishFlavor.setDishId(id);

        //遍历从前端获取的口味集合,并将name和value赋值给dishFlavor对象
        List<DishFlavor> flavors = dishDto.getFlavors();
        for (DishFlavor flavor : flavors) {
            //获取name
            String name = flavor.getName();
            dishFlavor.setName(name);

            //获取value
            String value = flavor.getValue();
            dishFlavor.setValue(value);
        }

        //给dishFlavor对象赋id
        Random random = new Random();
        dishFlavor.setId(random.nextLong(1000000000000000000l));

        //给dishFlavor对象赋创造和修改时间
        dishFlavor.setCreateTime(LocalDateTime.now());
        dishFlavor.setUpdateTime(LocalDateTime.now());

        //给dishFlavor对象赋创造和修改人
        dishFlavor.setCreateUser(1L);
        dishFlavor.setUpdateUser(1L);

        //向口味表里添加口味
        flavorMapper.addFlavor(dishFlavor);

        //向菜品表里添加菜品
        dishMapper.addDish(dishDto);
    }

重点就是这个实现类,当我们从controller层获取到了前端传来的dishDto这个参数后,从其中取出dish_flavor表里面的数据,并将其封装在dishFlavor这个对象中,这样就能通过传给mapper层dishFlavor这个对象来插入数据了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SRS OBS利用RTMP协议实现音视频推拉流

参考&#xff1a;https://ossrs.net/lts/zh-cn/docs/v5/doc/getting-started 1&#xff09;docker直接运行SRS服务&#xff1a; docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 registry.cn-hangzhou.aliyuncs.com/ossrs/srs:5运行起来后可以http://localho…

java Web 疫苗预约管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 JSP 疫苗预约管理系统是一套完善的web设计系统&#xff0c;对理解JSP java 编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发&#xff0c;数据库为Mysql5.0&#xff0c;使…

kaggle竞赛(房价预测)(Pytorch 06)

一 下载数据集 此数据集由Bart de Cock于2011年收集&#xff0c;涵盖了2006‐2010年期间 亚利桑那州 埃姆斯市的房价。 下载地址&#xff1a; import hashlib import os import tarfile import zipfile import requests#save DATA_HUB dict() DATA_URL http://d2l-data.s3…

“崖山数据库杯”深圳大学程序设计竞赛(正式赛)M题 一图秒

“崖山数据库杯”深圳大学程序设计竞赛&#xff08;正式赛&#xff09;_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com) —————— 可以去牛客看题解&#xff1a; 题解 | #暂时没想法#_牛客博客 (nowcoder.net) —————— 上面的就是题解了。…

Adobe Illustrator 2023 for Mac/Win:创意无限,设计无界

在数字艺术与设计领域&#xff0c;Adobe Illustrator 2023无疑是一颗璀璨的明星。这款专为Mac和Windows用户打造的矢量图形设计软件&#xff0c;以其强大的功能和卓越的性能&#xff0c;赢得了全球设计师的广泛赞誉。 Adobe Illustrator 2023在继承前代版本优点的基础上&#…

基于ARM内核的智能手环(day1)

整体介绍 智能手环由 ARM 内核 MCU(Cortex-M 系列)、TFTLCD 屏、温湿度传感器、心率传感器、 加速度传感器等主要几部分构成。该平台硬件采用 STM32 芯片&#xff0c;通过对温湿度传感器的驱动编写&#xff0c;获取周围温湿度数据&#xff0c;并在 LCD 屏显示&#xff0c;通过对…

设计模式12--组合模式

定义 案例一 案例二 优缺点

docker配置github仓库ghcr国内镜像加速

文章目录 说明ghcr.io简介配置镜像命令地址命令行方式1panel面板方式方式一&#xff1a;配置镜像加速&#xff0c;命令行拉取方式二&#xff1a;配置镜像仓库&#xff0c;可视化拉取 说明 由于使用的容器需要从github下载镜像&#xff0c;服务器在国外下载速度很慢&#xff0c…

MySQL InnoDB 之 多版本并发控制(MVCC)

多版本并发控制&#xff08;MVCC&#xff0c;Multi-Version Concurrency Control&#xff09;是数据库管理系统中用于提供高并发性和在事务处理中实现隔离级别的一种技术。MVCC 允许系统在不完全锁定数据库资源的情况下&#xff0c;处理多个并发事务&#xff0c;从而提高了数据…

计算机网络实验五:特定主机路由和默认路由

实验五&#xff1a;特定主机路由和默认路由 5.1 实验目的 &#xff08;1&#xff09;学习默认路由的概念和作用 &#xff08;2&#xff09;学习特定路由的概念和作用 &#xff08;3&#xff09;了解网络中路由选择的基本原理和应用 5.2 实验步骤 5.2.1 构建网络拓扑 在栏…

LeetCode - 字母板上的路径

1138. 字母板上的路径 刚看到这道题的时候,我居然想用搜索去做这道题,其实有更优解,用 / %算会更加的快,只需要遍历一次即可.假如说我们要找n,n是第13个字母,那他就位于 13 / 5 2, 13 % 5 3.他就位于三行三列(a为0,0),知道了原理,代码就好写了. class Solution { public:st…

基于51单片机HC05蓝牙环境检测系统

目录 1、概要 2、HC05配对传送数据教程 2.1 进入AT模式 2.2串口软件配置 2.3 异常分析 3、代码编写 4、原理图 5、仿真图 6、实物运行视频 7、小结 资料下载地址&#xff1a;基于51单片机手自动浇花系统 1、概要 本文详细介绍HC05蓝牙模块与51单片机的连接配对过程&#xff0c…

【WEEK5】 【DAY5】DML语言【中文版】

2024.3.29 Friday 目录 3.DML语言3.1.外键&#xff08;了解&#xff09;3.1.1.概念3.1.2.作用3.1.3.添加&#xff08;书写&#xff09;外键的几种方法3.1.3.1.创建表时直接在主动引用的表里写&#xff08;被引用的表的被引用的部分&#xff09;3.1.3.2.先创建表后修改表以添加…

二十四种设计模式与六大设计原则(三):【装饰模式、迭代器模式、组合模式、观察者模式、责任链模式、访问者模式】的定义、举例说明、核心思想、适用场景和优缺点

接上次博客&#xff1a;二十四种设计模式与六大设计原则&#xff08;二&#xff09;&#xff1a;【门面模式、适配器模式、模板方法模式、建造者模式、桥梁模式、命令模式】的定义、举例说明、核心思想、适用场景和优缺点-CSDN博客 目录 装饰模式【Decorator Pattern】 定义…

设计模式(9):外观模式

一.迪米特法则(最少知识原则) 一个软件实体应当尽可能少的与其他实体发生相互作用。 二.外观模式 为子系统提供统一的入口&#xff0c;封装子系统的复杂性&#xff0c;便于客户端调用。它的核心是什么呢&#xff0c;就是为我们的子系统提供一个统一的入口&#xff0c;封装子…

IDE/VS2015和VS2017帮助文档MSDN安装和使用

文章目录 概述VS2015MSDN离线安装离线MSDN的下载离线MSDN安装 MSDN使用方法从VS内F1启动直接启动帮助程序跳转到了Qt的帮助网页 VS2017在线安装MSDN有些函数在本地MSDN没有帮助&#xff1f;切换中英文在线帮助文档 概述 本文主要介绍了VS集成开发环境中&#xff0c;帮助文档MS…

探索一致性哈希算法以及在 Dubbo 负载均衡中的应用

文章目录 负载均衡简介基于哈希算法的负载均衡策略传统哈希算法一致性哈希算法虚拟一致性哈希算法 一致性哈希在 Dubbo 中的应用ConsistentHashSelector 构造方法ConsistentHashSelector select方法 负载均衡简介 负载均衡&#xff08;Load Balance&#xff0c;简称 LB&#x…

国产AI大模型推荐(一)

文心一言 主要功能&#xff1a; 各种类型的问答、各种文本创作、推理与数学计算、写代码、聊天交流、图片生成等。 链接&#xff1a;文心一言 讯飞星火 特点&#xff1a; 内容生成能力&#xff1a;我可以进行多风格多任务长文本生成&#xff0c;例如邮件、文案、公文、作文、对…

汇总:五个开源的Three.js项目

Three.js 是一个基于 WebGL 的 JavaScript 库&#xff0c;它提供了一套易于使用的 API 用来在浏览器中创建和显示 3D 图形。通过抽象和简化 WebGL 的复杂性&#xff0c;Three.js 使开发者无需深入了解 WebGL 的详细技术就能够轻松构建和渲染3D场景、模型、动画、粒子系统等。 T…

使用Node.js常用命令提高开发效率

Node.js是一个基于Chrome V8引擎的JavaScript运行时环境&#xff0c;广泛用于构建服务器端应用程序和命令行工具。Node.js提供了丰富的命令和工具&#xff0c;可以帮助开发者更高效地开发应用程序。在日常开发中&#xff0c;除了Node.js本身的核心功能外&#xff0c;npm&#x…