苍穹外卖-菜品分页查询

一.需求分析和设计

业务规则:

根据页码展示菜品信息

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

相关推荐
TDengine (老段)2 小时前
TDengine IDMP 可视化 —— 分享
大数据·数据库·人工智能·时序数据库·tdengine·涛思数据·时序数据
布局呆星2 小时前
SpringBoot 基础入门
java·spring boot·spring
不懂的浪漫3 小时前
mqtt-plus 架构解析(六):多 Broker 管理,如何让一个应用同时连接多个 MQTT 服务
spring boot·分布式·物联网·mqtt·架构
GottdesKrieges3 小时前
OceanBase数据库备份配置
数据库·oceanbase
不懂的浪漫3 小时前
mqtt-plus 架构解析(十):从内部项目到开源框架,mqtt-plus 的抽取过程与决策
spring boot·mqtt·架构·开源
SPC的存折4 小时前
MySQL 8组复制完全指南
linux·运维·服务器·数据库·mysql
运维行者_4 小时前
OpManager MSP NetFlow Analyzer集成解决方案,应对多客户端网络流量监控挑战
大数据·运维·服务器·网络·数据库·自动化·运维开发
炸炸鱼.5 小时前
Python 操作 MySQL 数据库
android·数据库·python·adb
softshow10265 小时前
Etsy 把 1000 个 MySQL 分片迁进 Vitess
数据库·mysql