1. 项目概述
在餐饮管理系统的开发中,菜品分类查询是一个基础但至关重要的功能。最近我在一个SpringBoot项目中实现了根据分类ID查询菜品列表的功能,这个功能看似简单,但涉及到了Controller层、Service层、Mapper层以及MyBatis动态SQL的完整调用链。下面我将详细拆解这个功能的实现过程,分享其中的技术细节和实战经验。
这个功能的核心需求是:前端传入一个菜品分类ID,后端返回该分类下所有启用的菜品列表,并按创建时间倒序排列。虽然需求描述很简单,但在实现过程中需要考虑接口设计、参数校验、查询优化等多个方面。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构解析
2.1 整体架构设计
这个功能采用了标准的SpringBoot三层架构:
- Controller层:接收HTTP请求,处理参数校验,调用Service层方法,返回统一格式的响应
- Service层:实现业务逻辑,组装查询条件,调用Mapper层
- Mapper层:通过MyBatis与数据库交互,执行动态SQL查询
这种分层架构的优点是职责清晰,便于维护和扩展。每层只关注自己的核心职责,通过接口进行解耦。
2.2 核心组件说明
- Dish实体类:对应数据库中的dish表,使用Lombok的@Builder注解实现了建造者模式
- DishMapper接口:定义数据库操作方法,对应的XML文件编写SQL
- DishService接口及实现:业务逻辑处理层
- DishController:对外暴露的REST接口
3. 代码实现详解
3.1 Controller层实现
java复制@GetMapping("/list")
@ApiOperation("根据分类id查询菜品")
public Result<List<Dish>> list(Long categoryId) {
List<Dish> list = dishService.list(categoryId);
return Result.success(list);
}
这段代码有几个关键点需要注意:
- 使用
@GetMapping注解声明这是一个处理GET请求的接口 - `@ApiOpe
