前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >黑马瑞吉外卖之新增菜品

黑马瑞吉外卖之新增菜品

作者头像
兰舟千帆
发布2022-09-23 11:34:39
3580
发布2022-09-23 11:34:39
举报
文章被收录于专栏:兰舟千帆的java学习笔记

黑马瑞吉外卖之新增菜品

前端页面分析以及需求分析

接下来我们去完成新增菜品的功能。首先还是来看前端页面。 新增菜品这个功能自然是在菜品的前端功能界面。 首先来看这个界面,这里绑定了按钮,并传入add。

在这里插入图片描述
在这里插入图片描述

调用到下面的方法,st就是掺入的一个参数,由上面可知传入了add,所以这里就是走到添加菜品的页面。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

一路追溯的话其实可以看到其实还是调用到了这个请求,其实这个请求就是为了获取到分类,这个获取分类的功能其实我们之前写过,就是分类功能界面里面。

在这里插入图片描述
在这里插入图片描述

所以调用的就是原来的我们的功能实现,这里传入参数type,值为1,所以最终查询的就是菜品。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

所以我们找到这个界面。所以就是走·到这个界面,但是你会发现这个界面里面还有一些新的出来的属性,口味?

在这里插入图片描述
在这里插入图片描述

先运行项目来看这个界面,这是添加菜品的前端界面,可以看到这里有一些供选的数据选项。

在这里插入图片描述
在这里插入图片描述

我们可以在菜品分类这里获取到菜品分类。

当我们点击到这里这个框的时候就会出现下面这些供选的列表数据。

在这里插入图片描述
在这里插入图片描述

然后还可以添加数据。我们可以在相应的口味名称下面添加一些口味。

在这里插入图片描述
在这里插入图片描述

那么这个是如何实现的,还是来看我们的前端页面。 我们可以定位到这个方法,该方法其实是对口味这个数据模型设置了一些值。

在这里插入图片描述
在这里插入图片描述

在上面挂载的方法对此进行了调用

那么从该页面来看,前端这里其实菜品是关联了口味这些数据,并且前端保存了一些预备的临时数据,我们进行添加菜品的时候要多口味进行选择,然后提交给后端。所以我们得出一个要求就是一定需要有一个菜品和口味的关联的表,所以我们就会想到还需要新的实体类,其实数据库设计的时候具有对口味表的提供。

在这里插入图片描述
在这里插入图片描述

是如何关联的呢?其实还是和之气前的一样的关联的方法,就像套餐和菜品的关联的方式一样,通过在一张表中对应到对方的id。

所以在数据库给出这样的表折后我们还需要设置对应的实体类。 叫做菜品口味实体类。

其实我们可以去运行项目,我们现在先不要写后端代码,运行程序,添加菜品,然后在浏览器中去查询请求这些数据。我们到这里去添加菜品。

在这里插入图片描述
在这里插入图片描述

我们可以去看标头

在这里插入图片描述
在这里插入图片描述

在负载这里我们也可以查看到具体的参数。

在这里插入图片描述
在这里插入图片描述

其实你通过这里可以非常清楚的看到,提交的信息划分为两类,一类是菜品,一类是口味。于是后端在保存提交的彩屏的时候需要去一方面保存菜品,一方面保存菜品关联口味这些数据。

还是十分容易设计的。

后端菜品添加的功能开发

这里首先还需要再DishDto这里扩展一下字段属性,口味数据是列表形式的数据。

在这里插入图片描述
在这里插入图片描述

首先我么按照口味表来设计出来实体类和相关的三层架构的类。

代码语言:javascript
复制
package com.jgdabc.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;

/**
菜品口味
 */
@Data
public class DishFlavor implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;


    //菜品id
    private Long dishId;


    //口味名称
    private String name;


    //口味数据list
    private String value;


    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;


    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;


    @TableField(fill = FieldFill.INSERT)
    private Long createUser;


    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Long updateUser;


    //是否删除
    private Integer isDeleted;

}

于是还是按照之前的一个过程,设计mapper也就是dao层,然后service,然后service的实现类, dao层

代码语言:javascript
复制
package com.jgdabc.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jgdabc.entity.DishFlavor;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface DishFlavorMapper extends BaseMapper<DishFlavor> {
}

service层

代码语言:javascript
复制
package com.jgdabc.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jgdabc.entity.DishFlavor;

public interface DishFlavorService extends IService<DishFlavor> {
}

然后service的实现类。

代码语言:javascript
复制
package com.jgdabc.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jgdabc.entity.DishFlavor;
import com.jgdabc.mapper.DishFlavorMapper;
import com.jgdabc.service.DishFlavorService;
import com.jgdabc.service.DishService;
import org.springframework.stereotype.Service;

@Service
public class DishFlavorServiceImpl extends ServiceImpl<DishFlavorMapper, DishFlavor> implements DishFlavorService {
}

上面已经说道,需要保存新增的菜品和菜品口味数据。我们现在需要去改造一下菜品的service类,然后我们改进一下dish 的service下面的具体的保存的方法。

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
 @Autowired
    private DishFlavorService dishFlavorService;
    @Transactional
    public void saveWithFlavor(DishDto dishDto) {
//        保存菜品的基本信息
//这里首先保存了菜品,
        this.save(dishDto);
        Long dishId = dishDto.getId();//菜品id
        List<DishFlavor> flavors = dishDto.getFlavors();//获取到对应id的菜品口味
       flavors = flavors.stream().map((item)->
        {
            //拿到的这个item就是这个DishFlavor集合
            item.setDishId(dishId);//让口味和id 上
            return item;
        }).collect(Collectors.toList());
//        保存菜品口味数据到菜品口味表
        dishFlavorService.saveBatch(flavors);//批量保存


    }

前端传来的数据是这样的。

在这里插入图片描述
在这里插入图片描述

菜品的基本的信息的保存是没有任何问题的,我们还需要去保存口味数据。但是口味数据这边前端传来的并没有id这些数据,我们看下面的数据库表中就可以明白,两个id必不可少。我们需要获取到的是dishid。于是我们上面还是去通过流的方式获取到了dishid,并进行了响应的设置赋值。然后我们进行了批量的保存。这样数据就完整了。

在这里插入图片描述
在这里插入图片描述

主要解释一下这里。

然后呢,我们就去Controller。

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
  //    新增菜品
    @PostMapping
    public R_<String> save(@RequestBody DishDto dishDto) {

        log.info(dishDto.toString());
        dishService.saveWithFlavor(dishDto);
        return R_.success("新增菜品成功");
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 黑马瑞吉外卖之新增菜品
  • 前端页面分析以及需求分析
  • 后端菜品添加的功能开发
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档