docs: 增补 MyBatis-Plus 使用规范\n\n- 明确 ServiceImpl 仅负责数据访问,不承载业务逻辑\n- 约定数据服务类命名为 XxxDataService,业务服务命名为 XxxService 等\n- 禁止在 MyBatis ServiceImpl 中使用 @Slf4j,避免与 MyBatis Log 冲突\n- 建议将 Entity/Mapper/ServiceImpl 封装在独立 data 包下,与业务服务层物理隔离

This commit is contained in:
zhangjf 2026-02-17 10:00:23 +08:00
parent 2c22213326
commit 6e75d23f1e

View File

@ -3395,6 +3395,30 @@ fund-sys/
| **分页** | pageNum, pageSize, total, list |
| **版本** | v1, v2 在URL中体现 |
### 8.3 MyBatis-Plus 使用规范
1. **职责边界**
- MyBatis-Plus 的 `ServiceImpl` / `IService` 实现类 **只负责数据访问、数据封装和转换**,不承载业务流程、业务校验、权限控制等逻辑;
- 所有业务逻辑必须放在**业务服务层**(如 `XxxService` / `XxxDomainService`),通过组合调用 `XxxDataService`/Mapper 完成。
2. **命名规范:区分数据服务与业务服务**
- 基于 MyBatis-Plus 的数据访问服务类,统一命名为:`XxxDataService``XxxDataServiceImpl`,例如:`UserDataService`
- 业务服务类命名为:`XxxService` / `XxxDomainService` / `XxxAppService`,例如:`UserService`
- 禁止出现既继承 `ServiceImpl` 又以 `XxxService` 命名、同时承载业务逻辑的“万能 Service”。
3. **日志规范MyBatis Service 不使用 @Slf4j**
- 任何继承 `ServiceImpl` 或实现 `IService` 的数据访问服务类,**禁止使用 Lombok 的 `@Slf4j` 注解**
- 如需记录业务日志,应在上层业务服务类中使用日志记录,或在数据服务中手动声明 `private static final Logger logger = LoggerFactory.getLogger(XxxDataService.class);` 且避免字段名 `log`,防止与 MyBatis 内部 `Log log` 冲突;
- 避免出现 `log.info(...)` 这类调用 MyBatis `Log` 接口的错误用法。
4. **包结构规范:数据访问层独立归档**
- 建议将 MyBatis 相关的 `ServiceImpl``Mapper``Entity` 等放在**独立的基础数据访问包**中,例如:
- `com.fundplatform.sys.data.entity`
- `com.fundplatform.sys.data.mapper`
- `com.fundplatform.sys.data.service`
- 业务服务层使用 `com.fundplatform.sys.service` / `com.fundplatform.sys.domain` 等包名,与数据访问层在物理结构上清晰分离;
- Controller 只依赖业务服务层,不直接依赖 `ServiceImpl` 或 Mapper。
---
## 九、附录