苍穹外卖-菜品分页查询

一.需求分析和设计

业务规则:

根据页码展示菜品信息

每页展示10条数据

分页是根据需求输入状态查询

接口设计:

二.代码开发

1.根据菜品分页查询接口设计对应的DTO

2.根据菜品分页查询接口设计VO

3.控制层开发

定义了一个菜品分页查询的接口,路径为 /page,使用 @GetMapping 来处理 HTTP GET 请求。方法接受一个 DishPageQueryDTO 对象作为参数,它封装了分页查询的条件(如菜品名称、分类 ID、状态等)。调用 dishService.pageQuery() 方法执行查询操作,获取分页结果 PageResult。最后,使用 Result.success() 返回查询结果,封装成一个统一的响应格式。

4.服务层及实现类

DishService 的实现类中,pageQuery() 方法执行了实际的分页查询操作。首先,使用 PageHelper.startPage() 方法设置分页参数,包括当前页 (page) 和每页条数 (pageSize)。PageHelper 会自动根据这些参数生成对应的 LIMIT 子句,控制数据库查询的结果集大小。然后,调用 dishMapper.pageQuery() 执行数据库查询,查询结果会被封装为 Page<DishVO> 对象。最后,方法返回一个 PageResult 对象,包含总记录数 (page.getTotal()) 和查询结果数据 (page.getResult()),封装成分页结果格式返回给控制器。

5.Mapper层代码

在 MyBatis 映射文件中,pageQuery 查询用于执行菜品的分页查询操作。SQL 查询包含: select :查询 dish 表的所有字段,并通过 left outer join 连接 category 表,以便获取菜品对应的分类名称 (categoryName)。

<where> :用于动态构建 SQL 的 where 子句。它根据传入的查询条件(如菜品名称、分类 ID 和状态)进行过滤。<if test="..."> 标签用于判断条件是否为空,只有条件不为空时才会加入到 SQL 中。例如,如果 name 不为空,则会添加 and d.name like concat('%', #{name}, '%')

order by d.create_time desc :结果按菜品的创建时间 (create_time) 降序排序,以确保最新的菜品排在前面。

SQL 查询根据传入的分页条件,动态生成过滤条件并执行查询,最终返回分页结果。

三.功能测试

1.接口测试工具测试

2.前后端联调

相关推荐
狼与自由2 小时前
Redis 分布式锁
数据库·redis·分布式
cyforkk2 小时前
Spring Boot 3 集成 Swagger 踩坑实录:解决 doc.html 404 与 Unauthorized 拦截
spring boot·后端·html
skiy2 小时前
redis 使用
数据库·redis·缓存
十七号程序猿2 小时前
Java图书管理系统 | 无需配置任何环境,双击一键启动,开箱即用
java·spring boot·vue·毕业设计·毕设·源代码管理
java修仙传2 小时前
数据库和缓存的一致性如何保证?
redis·mysql·mybatis
mygljx2 小时前
Redis 下载与安装 教程 windows版
数据库·windows·redis
奕成则成2 小时前
Redis 大 Key 问题排查与治理:原因、危害、实战方案
数据库·redis·缓存
umeelove352 小时前
Spring boot整合quartz方法
java·前端·spring boot
Hoshino.412 小时前
基于Linux中的数据库操作——例题实操(3)
数据库