前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >黑马瑞吉外卖之套餐信息的分页查询

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

作者头像
兰舟千帆
发布2022-09-29 11:28:30
3200
发布2022-09-29 11:28:30
举报

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

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

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

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

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

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

代码语言: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.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下详细的彩屏信息。

于是我们涉及出来这样的数据库。

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

然后就是实体类。

代码语言:javascript
复制
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;
}
代码语言:javascript
复制
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,

代码语言:javascript
复制
   @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);


    }

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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