接口分析
接口

get请求:负责查询数据
/page:对应表示分页查询入口
请求参数

categoryId(分类id)------可选 作用:按分类筛选菜品列表
name(菜品名称)------可选 作用:按菜品名称模糊查询
page(页码)------必需 作用:第几页,从 1 开始
pageSize(每页记录数)------必需 作用:每页返回多少条数据
status(分类状态/菜品状态)
返回响应

1️⃣ code(必需):表示业务状态码
2️⃣ msg:对应的提示信息内容
3️⃣ data:对应的返回的分页数据内容

total:总记录数
records:当前页数据
代码开发
分页DTO对象设计

分页VO对象设计

DIshController

把前端的分页查询请求转换为后端可执行的查询,并返回统一结构。
@GetMapping("/page")
把 HTTP GET 请求映射到这个方法
方法签名:Result<PageResult> page(DishPageQueryDTO dishPageQueryDTO)
返回值:Result<PageResult> ------"统一响应结构"
PageResult ------"分页数据结构"

total:总条数
records:当前页数据列表
形参: DishPageQueryDTO dishPageQueryDTO

Spring MVC 会把 URL 里的 Query 参数自动绑定到 DTO 里同名字段:
-
page=1→ dto.page = 1 -
pageSize=10→ dto.pageSize = 10 -
name=鸡→ dto.name = "鸡" -
categoryId=101→ dto.categoryId = 101 -
status=1→ dto.status = 1
调用 Service:dishService.pageQuery(dishPageQueryDTO)
调用service其中函数方法返回对应的数据并进行统一封装进行成功响应
DishService&DishServiceImpl其中内容

形参接受对应的DTO对象,后续来返回分页对象PageResult
service负责对应把"分页条件"变成真正的数据库分页查询,并返回前端需要的 total + records
实现类其中来具体实现

方法签名,对应返回PageResult,其中包括对应的total总条数&records当前页数数据列表信息
形参接受对应的DishPageQuertDTO对象
因为分页查询不仅有 page/pageSize,还可能有:
-
name(菜品名模糊)
-
categoryId(分类)
-
status(起售/停售)
PageHelper.startPage(...):分页的"开关"
对应告诉PageHelper,接下来我们需要来执行select 查询"要做分页拦截
它会把分页信息(page、pageSize)放进一个 ThreadLocal 里,然后等待后面 Mapper 执行 SQL 时拦截。
Mapper


id="pageQuery" 必须和 Mapper 接口方法名一致
resultType="com.sky.vo.DishVO" 表示这条 SQL 查出来的每一行结果,MyBatis 要映射成 DishVO 对象
select d.*, c.name as categoryName : 查询菜品其中的所有字段信息以及对应的分类名称

-
主表:dish(菜品)
-
关联表:category(分类)
-
通过
category_id拿到分类名称

通过<where>+if来进行筛选条件