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

需求分析

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

代码开发

  • 页面发送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);
    }

}
相关推荐
工业甲酰苯胺5 分钟前
Spring Boot 整合 MyBatis 的详细步骤(两种方式)
spring boot·后端·mybatis
严文文-Chris18 分钟前
【设计模式-享元】
android·java·设计模式
Flying_Fish_roe35 分钟前
浏览器的内存回收机制&监控内存泄漏
java·前端·ecmascript·es6
c#上位机44 分钟前
C#事件的用法
java·javascript·c#
【D'accumulation】1 小时前
典型的MVC设计模式:使用JSP和JavaBean相结合的方式来动态生成网页内容典型的MVC设计模式
java·设计模式·mvc
试行2 小时前
Android实现自定义下拉列表绑定数据
android·java
茜茜西西CeCe2 小时前
移动技术开发:简单计算器界面
java·gitee·安卓·android-studio·移动技术开发·原生安卓开发
bjzhang752 小时前
SpringBoot开发——集成Tess4j实现OCR图像文字识别
spring boot·ocr·tess4j
救救孩子把2 小时前
Java基础之IO流
java·开发语言
flying jiang2 小时前
Spring Boot 入门面试五道题
spring boot