1)代码生成器能帮你做什么
它会根据数据库表结构,自动生成一套常用代码骨架(可按需开关):
Entity(实体类)Mapper接口Mapper.xml(可选)Service/ServiceImplController(可选,REST 风格也可一键开)
适用场景:新建模块/新表、快速起 CRUD;之后你再在生成代码上二次开发即可。
2)前置准备(必须具备)
-
数据库已建库建表(建议先准备 1~2 张表练手,比如
t_user) -
项目能正常连接数据库(
spring.datasource.*配好) -
建议把“生成器代码”放在:
src/test/java下的一个GeneratorTest(最常见)- 或者独立一个
xxx-generator模块(更干净,推荐团队)
3)引入依赖(Maven)
<dependencies>
<!-- MyBatis-Plus 代码生成器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.1</version>
</dependency>
<!-- 模板引擎:二选一(Freemarker / Velocity),你选哪个就留哪个 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.32</version>
</dependency>
<!-- 或 Velocity -->
<!--
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
-->
<!-- 数据库驱动(以 MySQL8 为例) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
4)快速生成(可直接运行的最小示例)
在 src/test/java/.../GeneratorTest.java 写一个 main 方法即可跑生成。
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.Collections;
public class GeneratorTest {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=Asia/Shanghai&useSSL=false&characterEncoding=utf-8";
String username = "root";
String password = "123456";
String projectPath = System.getProperty("user.dir");
FastAutoGenerator.create(url, username, password)
// 1) 全局配置
.globalConfig(builder -> builder
.author("你的名字")
.outputDir(projectPath + "/src/main/java")
.disableOpenDir()
// .fileOverride() // 想覆盖旧文件时打开(谨慎)
)
// 2) 包配置
.packageConfig(builder -> builder
.parent("com.atguigu.mybatisplus") // 改成你的包名
.pathInfo(Collections.singletonMap(
OutputFile.xml, projectPath + "/src/main/resources/mapper"
))
)
// 3) 策略配置(最关键:选表、前缀、Lombok、Rest等)
.strategyConfig(builder -> builder
.addInclude("t_user") // 要生成的表(可多个)
.addTablePrefix("t_") // 表前缀过滤:t_user -> User
.entityBuilder()
.enableLombok()
.controllerBuilder()
.enableRestStyle()
.mapperBuilder()
.enableMapperAnnotation()
.enableBaseResultMap()
.enableBaseColumnList()
)
// 4) 模板引擎
.templateEngine(new FreemarkerTemplateEngine())
.execute();
}
}
运行后,你会在:
src/main/java/com/xxx/...看到 entity/mapper/service/controllersrc/main/resources/mapper看到 xml(如果你开启了 xml 输出)
5)你必须掌握的配置点
A. 选哪些表生成
.addInclude("t_user"):只生成这些表.addExclude("xxx"):排除某些表(少用)
B. 表前缀处理
-
.addTablePrefix("t_", "tbl_")- 表叫
t_user,实体叫User(否则会生成TUser或直接TUser风格)
- 表叫
C. Entity 常用开关
.entityBuilder().enableLombok():一键 Lombok- 还可以加:链式模型、字段注解、驼峰等(后面你需要再加)
D. Controller 风格
.controllerBuilder().enableRestStyle():生成@RestController
E. 覆盖旧文件(慎用)
-
.globalConfig(builder -> builder.fileOverride())- 建议:第一次生成不开;确认要重来才开
6)模板与自定义(从“能用”到“好用”)
当你不满足默认代码风格时,有两条路:
路线1:少改配置就够了(推荐先掌握)
- 改包名、输出路径、作者、选表、表前缀、是否生成 controller/xml 等
路线2:自定义模板(进阶)
- 把默认模板拷贝到项目里(如
resources/templates) - 在生成器里指定模板路径(不同版本写法略有差异)
- 常见用途:统一注释、统一返回体、统一 Controller 风格、加 DTO/VO、加基础字段等
7)常见踩坑与排错清单
- 连不上数据库:url / 用户名密码 / 驱动版本不匹配
- MySQL8 时区报错:url 加
serverTimezone=Asia/Shanghai - xml 没生成/路径不对:检查
OutputFile.xml的输出目录 - 实体名不想要表前缀:加
.addTablePrefix("t_") - 不想生成 Controller:把
.controllerBuilder()整段删掉即可 - 重复生成导致文件冲突:不要随便开
fileOverride()
8)建议的练习任务(按顺序做,学习最快)
- 用
t_user表跑通一次生成(只生成 entity/mapper/service) - 加上 controller(REST 风格),写一个
GET /users/{id}跑通 - 新增第二张表
t_product,练习.addInclude("t_user","t_product") - 给表加前缀
tbl_,练习.addTablePrefix("t_","tbl_") - 最后再尝试模板自定义(比如统一 controller 返回体)