【外卖系统】菜品信息分页查询

需求分析

当菜品数据很多时,用分页的形式来展示列表数据

代码开发

  • 页面发送ajax请求,将分页查询参数提交到服务端,获取分页数据
  • 页面发送请求,请求服务端进行图片下载,用于页面图片展示

构造分页

注意:
这里不能直接返回,否则分页查询显示的信息不是完整的。比如要展示菜品名称,返回的数据是没有菜品名称的。
后端返回的数据中,也需要有categoryName这个数据

java 复制代码
package com.springboot.reggie.controller;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.springboot.reggie.common.R;
import com.springboot.reggie.dto.DishDto;
import com.springboot.reggie.entity.Category;
import com.springboot.reggie.entity.Dish;
import com.springboot.reggie.entity.DishFlavor;
import com.springboot.reggie.service.CategoryService;
import com.springboot.reggie.service.DishFlavorService;
import com.springboot.reggie.service.DishService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.stream.Collectors;

/**
 * 菜品管理
 */
@RestController
@RequestMapping("/dish")
@Slf4j
public class DishController {
    @Autowired
    private DishService dishService;//菜品服务
    @Autowired
    private DishFlavorService dishFlavorService;//菜品口味
    @Autowired
    private CategoryService categoryService;//菜品分类
    @PostMapping
    public R<String> save(@RequestBody DishDto dishDto)//记得封装要加RequestBody注解
    {
        log.info(dishDto.toString());
        dishService.saveWithFlavor(dishDto);
        return R.success("新增菜品成功...");
    }

    /**
     * 菜品信息分页查询
     * @param page
     * @param pageSize
     * @param name
     * @return
     */

    @GetMapping("/page")
    public R<Page> page(int page, int pageSize,String name)
    {
        //构造分页构造器对象
        Page<Dish> pageInfo = new Page<>(page,pageSize);
        Page<DishDto> dishDtoPage = new Page<>();

        //条件构造器
        LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>();
        //添加过滤条件
        //使用模糊查询
        queryWrapper.like(name != null,Dish::getName,name);
        //添加排序条件 根据更新时间进行降序排序
        queryWrapper.orderByDesc(Dish::getUpdateTime);
        //执行分页查询
        dishService.page(pageInfo,queryWrapper);
        //将上面pageInfo对象中的属性拷贝到dishDtoPage中去
        BeanUtils.copyProperties(pageInfo,dishDtoPage,"records");
        List<Dish> records = pageInfo.getRecords();
       List<DishDto> list =  records.stream().map((item)->{
            DishDto dishDto = new DishDto();
            BeanUtils.copyProperties(item,dishDto);
         Long categoryId  =  item.getCategoryId();//分类id
            //根据id查询分类对象
        Category category =  categoryService.getById(categoryId);
        if(category != null)
        {
            String categoryName = category.getName();
            dishDto.setCategoryName(categoryName);
        }
         String categoryName = category.getName();
         dishDto.setCategoryName(categoryName);
        return  dishDto;
        }).collect(Collectors.toList());
      //  List<DishDto> list = null;

        dishDtoPage.setRecords(list);
        return R.success(pageInfo);
    }

}
相关推荐
稽稽稽稽不如人2 分钟前
《从零开始的java从入门到入土的学习生活——Java后端篇》Chapter21——Java后端篇学习记录——Redis初步入门
java·学习·生活
ID_180079054736 分钟前
淘宝店铺所有商品 API 接口:核心能力与数据返回参考
java·服务器·前端
轻刀快马18 分钟前
浅聊Java反射
java·开发语言
Gerardisite19 分钟前
企业微信智能客服开发实战:API自动回复指南
java·开发语言·python·机器人·企业微信
要开心吖ZSH21 分钟前
零基础入门 Spring WebFlux 与 Project Reactor:从小白到顿悟
java·响应式编程·spring webflux
智塑未来21 分钟前
装备制造行业设计制造一体化痛点攻克与实战经验总结
java·开发语言·制造
Devin~Y27 分钟前
电商AIGC智能客服面试:JVM调优、Spring Cloud微服务、Redis缓存、Kafka消息、K8s观测与RAG落地
java·jvm·spring boot·redis·spring cloud·kafka·kubernetes
Ai马猴子29 分钟前
企业定制专属模型,gpt-5.4-cdx高效适配,DMXAPI 安全合规
java·gpt·安全
星晨羽33 分钟前
Java通过FTP协议实现文件上传下载
java·开发语言
逸Y 仙X33 分钟前
文章三十:Elasticsearch SQL实战案例
java·大数据·sql·elasticsearch·搜索引擎·全文检索