模块结构 & 分层说明

这是一个典型的 Java 项目(基于 Maven/Gradle 结构),属于 sky-merchant 工程里的菜品模块(围绕菜品业务开发),遵循常见的 MVC 分层架构 设计。下面拆解每个包 / 类的作用,以及它们的关联关系:
1. 模块结构 & 分层说明
整体是标准的 Spring Boot 项目结构(也可能是普通 Java Web 项目,但分层逻辑通用),核心分 4 层:
controller:控制层(接收请求、返回响应)domain:领域模型层(实体类,映射数据库表 / 业务对象)mapper:数据访问层(操作数据库,MyBatis 常用)service:业务逻辑层(处理复杂业务流程)
目标:围绕「菜品(Dish)」相关的 增删改查、业务逻辑 开发,比如 “查询菜品列表”“新增菜品”“修改菜品口味” 等功能。
2. 每个文件 / 包的作用
(1)controller/DishController.java
- 作用:
- 作为 控制层,负责接收前端(或其他服务)的 HTTP 请求(GET/POST 等)。
- 调用
service层完成业务逻辑,再返回 JSON 响应给前端。 - 典型职责:参数校验、请求转发、统一响应封装。
- 关键代码示例(伪代码):
java运行
@RestController @RequestMapping("/dish") public class DishController { @Autowired private IDishService dishService; // 示例:查询菜品列表 @GetMapping("/list") public Result<List<Dish>> list(DishQueryDTO dto) { List<Dish> dishList = dishService.list(dto); return Result.success(dishList); // 返回给前端 } // 示例:新增菜品 @PostMapping public Result save(@RequestBody Dish dish) { dishService.save(dish); return Result.success(); } }
(2)domain/Dish.java & DishFlavor.java
- 作用:
Dish:菜品主表实体类,映射数据库的dish表(字段对应:菜品名称、价格、状态等)。DishFlavor:菜品口味实体类,映射数据库的dish_flavor表(字段对应:菜品 ID、口味名称、是否默认等)。- 通常配合 ORM 框架(MyBatis/MyBatis-Plus),实现 “对象 ↔ 数据库表” 的映射。
- 关键代码示例(伪代码):
java运行
// Dish.java @Data @TableName("dish") // 假设用 MyBatis-Plus public class Dish { private Long id; // 菜品 ID private String name; // 菜品名称 private BigDecimal price;// 价格 private Integer status; // 状态(0:停售 1:在售) // ... 其他字段(分类 ID、描述、图片等) } // DishFlavor.java @Data @TableName("dish_flavor") public class DishFlavor { private Long id; // 口味 ID private Long dishId; // 关联的菜品 ID private String name; // 口味名称(如“微辣”“不辣”) private Integer isDefault;// 是否默认口味 }
(3)mapper/DishMapper.java
- 作用:
- 作为 数据访问层,定义 SQL 操作接口(MyBatis 核心)。
- 直接操作数据库,实现 “菜品表” 的增删改查(比如
selectListinsertupdate等)。 - 通常和 XML 文件(
DishMapper.xml,可能在resources里)配合,写具体的 SQL。
- 关键代码示例(伪代码):
java运行
@Mapper // 标记为 MyBatis Mapper public interface DishMapper { // 示例:根据条件查询菜品列表 List<Dish> selectByCondition(DishQueryDTO dto); // 示例:新增菜品(返回自增 ID) @Insert("insert into dish(name, price, status) values(#{name}, #{price}, #{status})") @Options(useGeneratedKeys = true, keyProperty = "id") int insert(Dish dish); }
(4)service/IDishService.java & impl/DishServiceImpl.java
- 作用:
IDishService:业务接口,定义菜品相关的业务方法(比如listsaveupdateStatus等),规范业务行为。DishServiceImpl:接口实现类,负责编写具体的 业务逻辑(比如校验参数、调用mapper操作数据库、处理复杂流程)。
- 关键代码示例(伪代码):
java运行
// IDishService.java(接口) public interface IDishService { List<Dish> list(DishQueryDTO dto); // 查询菜品列表 void save(Dish dish); // 新增菜品 void updateStatus(Integer status, List<Long> ids); // 批量修改状态 } // DishServiceImpl.java(实现类) @Service public class DishServiceImpl implements IDishService { @Autowired private DishMapper dishMapper; @Autowired private DishFlavorMapper dishFlavorMapper; // 假设有关联口味 Mapper @Override public List<Dish> list(DishQueryDTO dto) { // 1. 可能做一些业务校验(如参数判空) // 2. 调用 Mapper 查询数据库 return dishMapper.selectByCondition(dto); } @Override public void save(Dish dish) { // 1. 新增菜品主表 dishMapper.insert(dish); // 2. 新增关联的口味(假设 dish 里包含 flavor 集合) List<DishFlavor> flavors = dish.getFlavors(); if (CollectionUtils.isNotEmpty(flavors)) { flavors.forEach(flavor -> { flavor.setDishId(dish.getId()); // 关联菜品 ID dishFlavorMapper.insert(flavor); }); } } }
3. 模块间的关联关系
流程遵循 “前端请求 → Controller → Service → Mapper → 数据库 → 反向返回”,以 “新增菜品” 为例:
-
前端调用:
发送POST /dish请求,携带菜品信息(名称、价格、口味等)。 -
DishController接收:
解析请求参数到Dish对象,调用dishService.save(dish)。 -
DishServiceImpl处理:- 先调用
dishMapper.insert(dish),往dish表插入主数据(获取自增 ID)。 - 再遍历
dish.getFlavors(),调用dishFlavorMapper.insert(flavor),往dish_flavor表插入口味数据(关联菜品 ID)。
- 先调用
-
DishMapper操作数据库:
执行 XML 里的insertSQL,完成数据写入。 -
返回响应:
从Service到Controller,最终返回 JSON 给前端(如{"code": 200, "msg": "新增成功"})。
4. 总结
- 分层职责清晰:
Controller管 “请求 / 响应”,Service管 “业务逻辑”,Mapper管 “数据库操作”,domain管 “数据结构”。
- 协作流程闭环:
前端(或其他服务)→Controller→Service→Mapper→ 数据库,反向同理。 - 典型应用:
这套结构常用于 餐饮系统(比如 “sky-merchant” 可能是 “商家端系统”,管理菜品、订单、库存等),你可以基于此扩展更多功能(如菜品分类、起售停售、口味管理)。
如果项目里有
DishFlavorMapper(当前截图没展示,但业务里大概率有),逻辑会更完整(关联菜品和口味表)。需要进一步扩展的话,可以补充 resources 里的 XML 映射文件、单元测试类等~
本文来自博客园,作者:舒然,转载请注明原文链接:https://www.cnblogs.com/Jeffrey1172417122/p/19006289

浙公网安备 33010602011771号