单表 CRUD 代码很适合生成器处理。这个项目保留了一个独立的 MP-Generator 模块,用 MyBatis-Plus 的 FastAutoGenerator
根据数据库表生成 Entity、Mapper、Service、ServiceImpl 和 XML。
一、为什么独立成模块
代码生成器只服务开发阶段,不应该进入线上服务依赖。独立模块有几个好处:
- 不污染业务服务依赖。
- 可以单独运行
main方法。 - 数据库连接配置可以放本地忽略文件。
- 生成策略修改不影响业务构建。
二、配置外置
生成器不把数据库连接写死在 Java 代码里,而是读取:
src/main/resources/generator.properties
仓库里只保留模板:
generator.properties.template
本地真实配置加入 .gitignore。这样换数据库、换表、换输出包名时,只改配置文件。
常用配置:
db.url=jdbc:mysql://host:3306/db?...
db.username=your-user
db.password=your-password
package.parent=com.zjc.provider
generator.tables=t_user,t_goods,t_order
generator.tablePrefix=t_
三、输出目录要稳定
生成器通过 CodeGenerator.class 的位置反推模块根目录,再拼出:
MP-Generator/src/main/java
这样无论从父目录还是模块目录运行,输出都不会跑到错误位置。
四、生成策略
当前策略是:
- 实体使用 Lombok
@Data - 字段显式加
@TableField - 保留
@Serial serialVersionUID - Mapper 文件名以
Mapper结尾 - 生成 XML 的
BaseResultMap和BaseColumnList - 不生成 Controller
不生成 Controller 是刻意选择。Controller 承担 API 契约、参数校验和文档注解,通常需要人工设计;Entity、Mapper、基础 Service 更适合生成。
五、生成后要迁移
生成的 Service 依赖 MyBatis-Plus 的 extension 和 Spring,而这些依赖属于业务模块,不属于生成器模块。所以生成后要把代码迁移到实际业务模块,再按当前分层补 DTO、转换器和测试。