Appearance
MyBatis-Plus 代码生成器
MyBatis-Plus 代码生成器(AutoGenerator)可以一键生成 Entity、Mapper、Mapper XML、Service、Controller 等代码,大幅提升开发效率。
一、为什么需要代码生成器?
手动编写 vs 代码生成:
手动编写(30 张表):
Entity × 30
Mapper × 30
Mapper XML × 30
Service × 30
ServiceImpl × 30
Controller × 30
→ 180+ 个文件,重复劳动
代码生成器:
配置好数据库连接 → 一键生成所有文件
→ 几分钟完成二、快速使用(3.5.3+ 新 API)
java
public class CodeGenerator {
public static void main(String[] args) {
// 数据源配置
FastAutoGenerator.create(
"jdbc:mysql://localhost:3306/mp_demo?useSSL=false&serverTimezone=Asia/Shanghai",
"root",
"123456"
)
// 全局配置
.globalConfig(builder -> {
builder.author("iRain") // 作者
.outputDir("D://code-gen") // 输出目录
.disableOpenDir() // 生成后不打开目录
.commentDate("yyyy-MM-dd"); // 注释日期格式
})
// 包配置
.packageConfig(builder -> {
builder.parent("com.example") // 父包名
.moduleName("system") // 模块名
.entity("entity") // 实体类包名
.mapper("mapper") // Mapper 包名
.service("service") // Service 包名
.serviceImpl("service.impl") // ServiceImpl 包名
.controller("controller") // Controller 包名
.xml("mapper.xml"); // Mapper XML 目录
})
// 策略配置
.strategyConfig(builder -> {
builder.addInclude("user", "order", "product") // 指定表名
.addTablePrefix("t_", "sys_") // 过滤表前缀
// Entity 策略
.entityBuilder()
.enableLombok() // 使用 Lombok
.enableTableFieldAnnotation() // 生成 @TableField
.logicDeleteColumnName("deleted") // 逻辑删除字段
.versionColumnName("version") // 乐观锁字段
.enableFileOverride() // 覆盖已有文件
// Mapper 策略
.mapperBuilder()
.enableBaseResultMap() // 生成 BaseResultMap
.enableBaseColumnList() // 生成 BaseColumnList
// Service 策略
.serviceBuilder()
.formatServiceFileName("%sService")
.formatServiceImplFileName("%sServiceImpl")
// Controller 策略
.controllerBuilder()
.enableRestStyle() // 生成 @RestController
.enableHyphenStyle() // URL 中划线风格
.formatFileName("%sController");
})
// 模板引擎(默认 Velocity)
.templateEngine(new VelocityTemplateEngine())
.execute();
}
}三、生成效果
生成目录结构:
D:/code-gen/
└── com/example/system/
├── entity/
│ └── User.java
├── mapper/
│ ├── UserMapper.java
│ └── xml/
│ └── UserMapper.xml
├── service/
│ ├── UserService.java
│ └── impl/
│ └── UserServiceImpl.java
└── controller/
└── UserController.java生成的 Entity:
java
@Data
@TableName("user")
public class User {
@TableId(type = IdType.ASSIGN_ID)
private Long id;
private String name;
private Integer age;
private String email;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
@TableLogic
private Integer deleted;
@Version
private Integer version;
}生成的 Controller:
java
@RestController
@RequestMapping("/system/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public User getById(@PathVariable Long id) {
return userService.getById(id);
}
@GetMapping
public List<User> list() {
return userService.list();
}
@PostMapping
public boolean save(@RequestBody User user) {
return userService.save(user);
}
@PutMapping
public boolean update(@RequestBody User user) {
return userService.updateById(user);
}
@DeleteMapping("/{id}")
public boolean delete(@PathVariable Long id) {
return userService.removeById(id);
}
}四、常用配置一览
4.1 全局配置
java
.globalConfig(builder -> {
builder.author("iRain")
.outputDir("D://code-gen")
.disableOpenDir()
.commentDate("yyyy-MM-dd")
.enableSpringdoc(); // 生成 Swagger 注解
})4.2 实体策略
java
.entityBuilder()
.enableLombok() // @Data
.enableChainModel() // 链式调用
.enableTableFieldAnnotation() // @TableField
.logicDeleteColumnName("deleted") // 逻辑删除
.versionColumnName("version") // 乐观锁
.addSuperEntityColumns("id", "createTime", "updateTime") // 父类排除
.enableFileOverride() // 覆盖已有文件
.idType(IdType.ASSIGN_ID) // 主键策略
.formatFileName("%s") // 实体名格式4.3 Mapper 策略
java
.mapperBuilder()
.enableBaseResultMap() // 生成 resultMap
.enableBaseColumnList() // 生成 SQL 片段
.superClass(BaseMapper.class)
.formatMapperFileName("%sMapper")
.formatXmlFileName("%sMapper")4.4 Service 策略
java
.serviceBuilder()
.superServiceClass(IService.class)
.superServiceImplClass(ServiceImpl.class)
.formatServiceFileName("%sService")
.formatServiceImplFileName("%sServiceImpl")4.5 Controller 策略
java
.controllerBuilder()
.enableRestStyle() // @RestController
.enableHyphenStyle() // /system/user-info
.superClass(BaseController.class)
.formatFileName("%sController")五、自定义模板
java
// 使用自定义模板
FastAutoGenerator.create(url, username, password)
.templateConfig(builder -> {
builder.entity("/templates/entity.java")
.mapper("/templates/mapper.java")
.service("/templates/service.java")
.serviceImpl("/templates/serviceImpl.java")
.controller("/templates/controller.java")
.xml("/templates/mapper.xml");
})
.templateEngine(new FreemarkerTemplateEngine()) // 使用 Freemarker
.execute();六、速记总结
代码生成器配置流程:
① 数据源 → 连数据库
② 全局配置 → 作者、输出路径
③ 包配置 → 父包、模块名、各层包名
④ 策略配置 → 表名、Entity/Mapper/Service/Controller 策略
⑤ 模板引擎 → Velocity(默认)/ Freemarker
⑥ 执行 → execute()
速记口诀:
数据源连库,全局定输出,
包配置定路径,策略定细节,
模板定风格,一键全生成。七、面试要点
| 问题 | 答案要点 |
|---|---|
| 代码生成器能生成什么? | Entity、Mapper、XML、Service、ServiceImpl、Controller |
| 推荐哪个 API? | 3.5.3+ 推荐 FastAutoGenerator(链式 API) |
| 支持哪些模板引擎? | Velocity(默认)、Freemarker、Beetl |
