菜品信息的分页查询
需求分析:
系统中的菜品数据很多时,如果在一个页面中全部展示出来会显得比较乱,不便于查看,所以一般的系统中都会以分页的方式来展示列表数据
代码开发梳理:
1、页面发送ajax请求,将分页查询参数(page, pageSize)提交到服务端,获取分页数据
2、页面发送请求,请求服务端进行图片下载,用于页面图片展示
开发菜品信息分页查询功能,其实就是在服务端编写代码去处理前端页面发送的这2次请求即可
/** * 菜品信息分页 * @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<>(page, pageSize); //构造条件构造器 LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<Dish>(); //添加过滤条件 queryWrapper.like(name!=null, Dish::getName, name); //添加排序条件 queryWrapper.orderByDesc(Dish::getUpdateTime); //执行查询,查询后page内部会将结果封装到pageInfo dishService.page(pageInfo, queryWrapper); //对象拷贝 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); String categoryName = category.getName(); dishDto.setCategoryName(categoryName); return dishDto; }).collect(Collectors.toList()); dishDtoPage.setRecords(list); return R.success(dishDtoPage); }
菜品分页查询不能直接查询Page<Dish>,因为前端显示信息包含一个菜品类别名称,而dish中只包含categoryId。因此新建一个Page<DishDto>,将Page<Dish>执行完查询后除了records的其它所有数据都copy到Page<DishDto>中,对Page<DishDto>中的records的item重新赋值,在赋值的过程中根据Page<Dish>中records的categoryId查询对应的categoryName,并将其赋值给Page<DishDto>中的item,其他值从Page<Dish>中拷贝。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构