苍穹外卖-菜品分页查询

一.需求分析和设计

业务规则:

根据页码展示菜品信息

每页展示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.前后端联调

相关推荐
Bs_MoneyMagnet6 小时前
基于springboot+vue的旅游景区点评系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·旅游
风跟我说过她6 小时前
SQL 一键转经典 Chen 风格 ER 图:开源 CLI + 在线工具 + Agent Skill
数据库·python·sql·开源·开源软件
这个DBA有点耶6 小时前
MySQL大表DDL锁表锁到崩溃?Online DDL的3个关键参数和实战避坑
数据库·mysql·架构
ID34610744206 小时前
【课程设计】基于Spring Boot+Vue的校园共享无人机服务系统设计与实现-计算机毕设 附源码44219
javascript·vue.js·spring boot·python·node.js·php·课程设计
2302_1117 小时前
java依赖小结
java·运维·数据库
听到微笑7 小时前
Elasticsearch 如何存储与检索海量向量
数据库·elasticsearch
海浪仙人掌7 小时前
速动比率怎么分析?速动比率分析有哪些注意事项?
大数据·数据库·人工智能
企业数字化笔记8 小时前
固定资产历史数据怎么导入系统?Excel模板、字段映射和数据校验
android·java·数据库·后端
还是奇怪8 小时前
OpenAI GPT-5.6 构建指南拆解:创业公司如何用模型选择与 Responses API 降低 Agent 成本
java·数据库·人工智能·gpt
可涵不会debug8 小时前
LangChain 文本分割器详解:字符分割、Token 分割、硬约束递归分割实战
java·前端·数据库