SpringBoot整合MyBatis-Plus代码生成器实战指南
1. 环境准备与项目初始化
在开始之前,确保你已经具备以下基础环境:
- JDK 1.8或更高版本
- Maven 3.6+
- MySQL 8.0+数据库服务
- 一个基础的SpringBoot 2.7.x项目
常见环境问题排查清单:
- 检查Java版本:
java -version - 确认Maven配置:
mvn -v - 验证MySQL服务状态:
systemctl status mysql(Linux)或服务管理器(Windows)
创建基础项目结构:
mybatis-plus-generator-demo ├── pom.xml └── src ├── main │ ├── java │ └── resources └── test └── java2. 关键依赖配置
在pom.xml中添加必要的依赖项:
<dependencies> <!-- MyBatis-Plus生成器UI核心 --> <dependency> <groupId>com.github.davidfantasy</groupId> <artifactId>mybatis-plus-generator-ui</artifactId> <version>1.4.5</version> <scope>test</scope> </dependency> <!-- MySQL 8.0+驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.31</version> </dependency> <!-- Lombok简化代码 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies>依赖选择注意事项:
| 依赖项 | 推荐版本 | 作用说明 |
|---|---|---|
| mybatis-plus-generator-ui | ≥1.4.5 | 提供Web交互界面 |
| mysql-connector-java | ≥8.0.25 | MySQL官方JDBC驱动 |
| lombok | 最新稳定版 | 减少样板代码 |
3. 启动类深度配置
创建GeneratorMain.java启动类,这是整个生成器的控制中心:
package com.example; import com.github.davidfantasy.mybatisplus.generatorui.GeneratorConfig; import com.github.davidfantasy.mybatisplus.generatorui.MybatisPlusToolsApplication; import com.github.davidfantasy.mybatisplus.generatorui.mbp.NameConverter; public class GeneratorMain { public static void main(String[] args) { GeneratorConfig config = GeneratorConfig.builder() .driverClassName("com.mysql.cj.jdbc.Driver") .jdbcUrl("jdbc:mysql://localhost:3306/your_db?useSSL=false&serverTimezone=Asia/Shanghai") .userName("your_username") .password("your_password") .basePackage("com.your.package") .nameConverter(new NameConverter() { @Override public String serviceNameConvert(String tableName) { return this.entityNameConvert(tableName) + "Service"; } @Override public String controllerNameConvert(String tableName) { return this.entityNameConvert(tableName) + "Controller"; } }) .port(8068) .build(); MybatisPlusToolsApplication.run(config); } }MySQL 8.0连接参数详解:
com.mysql.cj.jdbc.Driver:必须使用cj驱动serverTimezone:必须明确指定时区useSSL=false:本地开发可禁用SSLallowPublicKeyRetrieval=true:某些情况需要添加
重要提示:生产环境请勿使用简单密码,并确保配置正确的SSL参数
4. Web UI操作全流程
启动应用后访问http://localhost:8068,界面主要功能区域:
- 数据源配置区:可覆盖启动类中的配置
- 表选择区:显示数据库所有表
- 生成选项区:控制生成哪些组件
- 模板配置区:自定义各类模板
典型操作步骤:
- 左侧选择需要生成代码的数据表
- 中间区域勾选要生成的组件类型:
- Entity
- Mapper接口
- Mapper XML
- Service接口
- Service实现类
- Controller
- 右侧配置包路径和命名规则
- 点击"生成代码"按钮
生成代码结构示例:
src/main/java/com/example/ ├── controller │ └── UserController.java ├── entity │ └── User.java ├── mapper │ ├── UserMapper.java │ └── xml │ └── UserMapper.xml └── service ├── UserService.java └── impl └── UserServiceImpl.java5. 高级配置与自定义
5.1 自定义模板配置
在resources目录下创建generator-templates文件夹,可以放置自定义模板:
resources/ └── generator-templates/ ├── entity.java.ftl ├── mapper.java.ftl ├── mapper.xml.ftl ├── service.java.ftl └── controller.java.ftl模板变量参考:
${table.name}:表名${table.comment}:表注释${entity}:实体类名${author}:作者名${date}:当前日期
5.2 多数据源支持
通过修改启动类支持多数据源:
GeneratorConfig config = GeneratorConfig.builder() .dataSourceConfig(builder -> { builder.addDataSource("ds1", "com.mysql.cj.jdbc.Driver", "jdbc:mysql://localhost:3306/db1", "user", "pass"); builder.addDataSource("ds2", "oracle.jdbc.OracleDriver", "jdbc:oracle:thin:@localhost:1521:ORCL", "user", "pass"); }) // 其他配置... .build();5.3 生成策略配置
通过NameConverter接口实现各类命名策略:
.nameConverter(new NameConverter() { @Override public String entityNameConvert(String tableName) { // 自定义实体类命名规则 return StrUtil.upperFirst(StrUtil.toCamelCase(tableName)); } @Override public String mapperNameConvert(String tableName) { return entityNameConvert(tableName) + "Mapper"; } })6. 常见问题解决方案
问题1:驱动类加载失败
症状:
java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver解决方案:
- 检查pom.xml中mysql-connector-java版本
- 确认依赖已正确下载(查看Maven本地仓库)
- 清理项目后重新构建
问题2:时区错误
症状:
The server time zone value 'xxx' is unrecognized...解决方案: 在jdbcUrl中添加时区参数:
jdbc:mysql://localhost:3306/db?serverTimezone=Asia/Shanghai问题3:Public Key Retrieval错误
症状:
Public Key Retrieval is not allowed解决方案: 在jdbcUrl中添加:
allowPublicKeyRetrieval=true性能优化建议:
- 对于大表生成,可以先在UI中预览再生成
- 生成前关闭不必要的IDE索引
- 分批次生成大量表结构
7. 实际应用技巧
技巧1:批量生成配置
- 在UI中选择多个表
- 使用"批量设置"功能统一配置
- 勾选"覆盖已有文件"谨慎使用
技巧2:自定义注释模板
修改entity.java.ftl模板:
/** * ${table.comment!} * * @author ${author!} * @since ${.now?string('yyyy-MM-dd')} */技巧3:生成后自动格式化
配置IDE在生成后自动格式化代码:
- IntelliJ IDEA: Settings → Tools → Actions on Save
- Eclipse: Window → Preferences → Java → Editor → Save Actions
技巧4:历史记录管理
生成器会保留最近的操作记录,位置:
~/.mybatis-plus-generator-ui/history可以定期清理或备份重要配置
8. 集成到现有项目的最佳实践
场景1:已有SpringBoot项目集成
- 在test scope添加依赖
- 创建独立的generator模块
- 通过Profile控制生成环境
场景2:团队共享配置
- 将通用模板放入共享目录
- 使用Maven资源过滤统一变量
- 建立标准命名规范文档
场景3:CI/CD集成
- 编写生成脚本
- 配置生成后自动测试
- 设置生成结果验证机制
版本控制建议:
- 不提交生成的Entity/Mapper等基础代码
- 提交自定义模板和配置
- 记录重要生成操作的日志
9. 安全注意事项
数据库安全:
- 不要在生产环境使用简单密码
- 生成器应用应当限制访问IP
- 及时关闭不需要的生成器实例
代码安全:
- 检查生成的Controller是否包含必要安全注解
- 验证Service层事务配置
- 审核自动生成的SQL语句
配置安全:
- 敏感信息应当使用环境变量
- 不要将数据库配置提交到版本控制
- 定期轮换数据库凭据
10. 扩展应用场景
场景1:数据库文档生成
利用生成的Entity可以:
- 自动生成Swagger文档
- 导出Markdown格式表结构
- 生成数据库关系图
场景2:测试数据生成
结合生成的Model可以:
- 自动创建测试用例
- 生成模拟数据
- 构建性能测试数据集
场景3:多端代码生成
通过自定义模板可以:
- 生成前端API调用代码
- 创建DTO转换类
- 输出TypeScript类型定义
在实际项目中使用这套工具链后,团队的新表开发时间从原来的2小时缩短到15分钟左右,特别是对于包含20+字段的复杂表结构,优势更加明显。关键是要建立适合自己团队的模板库和规范,定期更新维护。