苍穹外卖-菜品分页查询

一.需求分析和设计

业务规则:

根据页码展示菜品信息

每页展示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 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
冬奇Lab2 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
用户3521802454753 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程
昵称为空C3 天前
手撸一个动态 SQL 执行引擎:不重启服务,在线增删改查任意数据库
spring boot·后端
ClouGence3 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
无响应de神3 天前
三、用户与权限管理
数据库·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
小宇宙Zz4 天前
Maven依赖冲突
java·服务器·maven