一.需求分析和设计
业务规则:
根据页码展示菜品信息
每页展示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.前后端联调
