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

黑马瑞吉外卖之套餐信息的分页查询

黑马瑞吉外卖之套餐信息的分页查询

  • 表和实体类环境以及前端页面分析
  • 后端代码的逻辑开发

表和实体类环境以及前端页面分析

首先这里是套餐的功能开发,我们在设置数据库表以及之后的实体类的时候我们需要关注的就是套餐本身的分类以及套餐下关联的菜品。

所以首先是数据库表。
来看数据库当中的一个套餐的表以以及其设置的字段。这里我们需要注意到之前的分类管理中的id,我们套餐是分类的一种,所以这里需要有分类id。
在这里插入图片描述

于是我么设计出这样的表结构,然后就是实体类。

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.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 套餐
 */
@Data
public class Setmeal implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;


    //分类id
    private Long categoryId;


    //套餐名称
    private String name;


    //套餐价格
    private BigDecimal price;


    //状态 0:停用 1:启用
    private Integer status;


    //编码
    private String code;


    //描述信息
    private String description;


    //图片
    private String image;


    @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;
}

然后我们需要准备的就是套餐和菜品管理的表以及实体类。那自然这个套餐关联菜品的表首先要有套餐的id,然后对应每个i套餐id下详细的彩屏信息。

于是我们涉及出来这样的数据库。
在这里插入图片描述
然后就是实体类。

package com.jgdabc.entity;

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

/**
 * 套餐菜品关系
 */
@Data
public class SetmealDish implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;


    //套餐id
    private Long setmealId;


    //菜品id
    private Long dishId;


    //菜品名称 (冗余字段)
    private String name;

    //菜品原价
    private BigDecimal price;

    //份数
    private Integer copies;


    //排序
    private Integer sort;


    @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;
}

package com.jgdabc.entity;

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

/**
 * 套餐菜品关系
 */
@Data
public class SetmealDish implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;


    //套餐id
    private Long setmealId;


    //菜品id
    private Long dishId;


    //菜品名称 (冗余字段)
    private String name;

    //菜品原价
    private BigDecimal price;

    //份数
    private Integer copies;


    //排序
    private Integer sort;


    @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;
}

然后我们还是需要去扩展实体类属性,于是我们拓展出来dto。我们需要给套餐的实体类添加两个属性,一个是菜品的字段列表属性,一个是分类的名称。这两个属性我们后面需要用到。

在分页查询这里。
在这里插入图片描述

有关数据的展示的问题,我们会发现,在setmeal这里其实并没有这个套餐分类,而在前端页面,要展示的话是需要这个字段的,所以我们需要拓展道这个属性,然后菜品数据这里也是一样的道理,我么之后再添加套餐的时候,需要添加菜品的一些信息,以及其它的操作,都需要这个属性。所以我们页扩展了出来。
在这里插入图片描述

然后数据展示的话,主要其实就是做一个分页的查询展示。
在这里插入图片描述

这样的分页查询我们还是按照之前的逻辑,当我们打开这个前端页面的时候,这里的方法这里其实还是进行了挂载的自动加载。
在这里插入图片描述
那就是这样的一个方法。

在这里插入图片描述
然后我们点进去去查看这个方法。下面这个就是分页查询的请求方法和路径。
在这里插入图片描述
其实在浏览器这里我们也可以去调试路径。
由于我的后端代码已经写好了,所以这里返回200。
在这里插入图片描述
在这里插入图片描述

后端代码的逻辑开发

在这之前我们还需要进行三层架构的开发,就是dao,service,impl这几层的开发。
首先就是mapper层,我们只需要去在setmeal的基础上去开发,因为只是分页。

然后具体我们直接看到controller,

   @GetMapping("/page")
    public R_<Page> page(int page,int pageSize,String name)
    {

//构造setmeal的分页·构造器
        Page<Setmeal> pageInfo = new Page<>(page, pageSize);
//        拓展的dto的分页构造器
        Page<SetmealDto> DtoPage = new Page<>();
//   setmeal条件的添加
        LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>();
//        根据添加name是否查询,如果name为空就不会作为查询条件1,如果不为空就作为查询条件
        queryWrapper.like(name!=null,Setmeal::getName,name);
//        添加一个排序条件,根据更新时间来进行降序排列
        queryWrapper.orderByDesc(Setmeal::getUpdateTime);
//        setmeal里面属性的值的查询,查询的结果会被处理给到pageInfo
        setMealService.page(pageInfo,queryWrapper);
//        拷贝属性
//        这里是拷贝属性,但是这个records需要单独处理,因为page里面的这个record是一个泛型修饰的属性,我们拷贝的话,需要
//        注意setmeal做泛型修饰里面的records要转变一下,然后才能给到records,另外我们需要将categoryName
//        加上去
        BeanUtils.copyProperties(pageInfo,DtoPage,"records");
//        下面单独处理了records
        List<Setmeal> records = pageInfo.getRecords();
       List<SetmealDto> list = records.stream().map((item)->
        {
            SetmealDto setmealDto = new SetmealDto();
            BeanUtils.copyProperties(item,setmealDto);

            Long categoryId = item.getCategoryId();
            //根据分类的id来查询分类的对象
            Category category = categoryService.getById(categoryId);
            if(category!=null)
            {
                String categoryName = category.getName();
                setmealDto.setCategoryName(categoryName);

            }
            return  setmealDto;
        }).collect(Collectors.toList());
        DtoPage.setRecords(list);
        return  R_.success(DtoPage);


    }

还是比较容易理解的。整体的代码思路理解了,剩下的就只是单单的记忆了。

相关文章:

  • 9.14 c++基础
  • python创建智能问答机器人
  • MyBatis的简介和核心的组件(映射器、执行器、SqlSession及其工厂)
  • 《计算几何》学习笔记
  • 干货分享:Docker 容器应用示例
  • 闭包的定义,原理,应用场景,优点,缺点
  • js控制台输出佛祖保佑图形图案/彩色图形图案实例代码
  • 黑客进行攻击中最重要的环节“信息收集”
  • Vue(6)
  • JSON 数据类型转换工具
  • CSP-J 2019 入门级 第一轮 第17题
  • 小程序map组件一——使用腾讯地图个性化地图组件、腾讯云可视化大屏展示
  • 【项目实战】高并发内存池
  • go语言|数据结构:二叉树可视化(svg树形图改进版)
  • JVM - 垃圾回收方式性能研究
  • 分享的文章《人生如棋》
  • DOM的那些事
  • js中forEach回调同异步问题
  • k个最大的数及变种小结
  • node学习系列之简单文件上传
  • PHP 小技巧
  • Python_OOP
  • Python学习之路16-使用API
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Shadow DOM 内部构造及如何构建独立组件
  • SQL 难点解决:记录的引用
  • 百度地图API标注+时间轴组件
  • 精彩代码 vue.js
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前嗅ForeSpider中数据浏览界面介绍
  • 怎么把视频里的音乐提取出来
  • HanLP分词命名实体提取详解
  • Mac 上flink的安装与启动
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​你们这样子,耽误我的工作进度怎么办?
  • #if和#ifdef区别
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • %@ page import=%的用法
  • (04)odoo视图操作
  • (C语言)字符分类函数
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (转)Oracle存储过程编写经验和优化措施
  • (转)visual stdio 书签功能介绍
  • **PHP二维数组遍历时同时赋值
  • .net CHARTING图表控件下载地址
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET 材料检测系统崩溃分析
  • .NetCore项目nginx发布