引用地址:https://blog.csdn.net/Flying_Fish_roe/article/details/142435279
MyBatis-Plus 提供了一个强大的 代码生成器,可以根据数据库表结构自动生成对应的实体类、Mapper 接口、Mapper XML 文件、Service 和 Controller 等代码。它极大地提高了开发效率,减少了手动编写基础代码的工作量。通过配置代码生成器,开发者可以快速生成项目中常用的 CRUD 代码,并且可以自定义生成策略,灵活调整生成的代码结构。
1. 什么是 MyBatis-Plus 代码生成器?
MyBatis-Plus 代码生成器基于模板引擎,可以自动生成以下内容:
实体类:对应数据库表的 Java 实体类。
Mapper 接口:用于数据库访问的 Mapper 接口。
Mapper XML:与 Mapper 接口对应的 SQL 映射文件(可选)。
Service 和 ServiceImpl:业务逻辑层的接口和实现类。
Controller:处理 HTTP 请求的控制层代码(可选)。
通过代码生成器,开发者只需要配置好数据库连接和表名等信息,即可自动生成一套基础的代码结构,节省大量重复性工作。
2. 引入代码生成器依赖
首先,在 pom.xml 中引入 MyBatis-Plus 代码生成器的依赖:
<dependencies>
<!-- MyBatis-Plus 代码生成器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3</version>
</dependency>
<!-- 模板引擎(Freemarker 或 Velocity)-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.31</version>
</dependency>
</dependencies>
mybatis-plus-generator:MyBatis-Plus 代码生成器的核心依赖。
velocity-engine-core:使用 Velocity 作为模板引擎,也可以选择 Freemarker 等其他模板引擎。
mysql-connector-java:数据库驱动,具体数据库类型根据实际情况选择。
3. 基本代码生成器配置
MyBatis-Plus 代码生成器的核心配置通常通过 Java 代码实现,下面是一个简单的代码生成器配置示例。
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
public class CodeGenerator {
public static void main(String[] args) {
// 1. 创建代码生成器
AutoGenerator generator = new AutoGenerator();
// 2. 全局配置
GlobalConfig globalConfig = new GlobalConfig();
String projectPath = System.getProperty("user.dir"); // 项目路径
globalConfig.setOutputDir(projectPath + "/src/main/java"); // 输出目录
globalConfig.setAuthor("Your Name"); // 作者
globalConfig.setOpen(false); // 生成后是否打开资源管理器
globalConfig.setSwagger2(true); // 开启 Swagger2 注解
globalConfig.setServiceName("%sService"); // 去掉 Service 接口的首字母 I
generator.setGlobalConfig(globalConfig);
// 3. 数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai");
dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("yourpassword");
dataSourceConfig.setDbType(DbType.MYSQL);
generator.setDataSource(dataSourceConfig);
// 4. 包配置
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("com.example.demo"); // 父包名
packageConfig.setModuleName("user"); // 模块名
generator.setPackageInfo(packageConfig);
// 5. 策略配置
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setNaming(NamingStrategy.underline_to_camel); // 表名生成策略
strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel); // 字段名生成策略
strategyConfig.setEntityLombokModel(true); // 自动生成 Lombok 注解
strategyConfig.setRestControllerStyle(true); // 生成 Rest 风格的 Controller
strategyConfig.setInclude("user"); // 需要生成的表名(多个表可以使用逗号分隔)
strategyConfig.setControllerMappingHyphenStyle(true); // URL 中驼峰转连字符
generator.setStrategy(strategyConfig);
// 6. 配置模板引擎
generator.setTemplateEngine(new VelocityTemplateEngine());
// 7. 执行生成操作
generator.execute();
}
}
在这个示例中,我们进行了以下配置:
全局配置 (GlobalConfig):
设置代码生成的输出目录、作者信息。
指定是否生成 Swagger2 注解(适用于生成 REST API 文档)。
自定义 Service 接口的命名规则,去掉默认的 I 前缀。
数据源配置 (DataSourceConfig):
配置数据库连接的 URL、驱动、用户名和密码。
包配置 (PackageConfig):
设置生成代码的包结构,parent 用于定义顶层包名,moduleName 定义模块名。
策略配置 (StrategyConfig):
配置表和字段的命名规则(下划线转驼峰)。
生成 Lombok 注解,减少 getter、setter 方法的编写。
配置生成的 Controller 使用 REST 风格。
模板引擎 (VelocityTemplateEngine):
使用 Velocity 作为模板引擎,负责生成对应的代码文件。
4. 代码生成器的高级配置
MyBatis-Plus 的代码生成器非常灵活,支持多种自定义配置。下面介绍一些常见的高级配置选项。
4.1 自定义文件输出路径
可以通过 GlobalConfig.setOutputDir() 方法指定代码生成的输出路径。例如,将不同的文件生成到不同的目录下:
globalConfig.setOutputDir(projectPath + "/src/main/java"); // 默认输出到 src/main/java
4.2 忽略表前缀
在一些项目中,数据库表往往会有统一的前缀(如 t_ 表示表),代码生成器可以忽略这些前缀,以便生成的实体类更符合命名规范:
strategyConfig.setTablePrefix("t_"); // 忽略表前缀 t_
4.3 实体类字段的自动填充
对于数据库中的 create_time、update_time 等字段,通常需要在插入或更新时自动填充。MyBatis-Plus 代码生成器支持自动填充配置:
strategyConfig.setEntityTableFieldAnnotationEnable(true); // 开启实体类字段注解
并在实体类的字段上添加 @TableField 注解:
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
4.4 自定义模板路径
如果需要修改生成的代码模板,可以自定义模板路径。MyBatis-Plus 允许通过设置自定义模板路径来覆盖默认模板:
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setEntity("/templates/entity.java"); // 自定义实体类模板
generator.setTemplate(templateConfig);
1
2
3
自定义模板文件可以放置在 resources/templates 目录下,并根据需求修改内容。
4.5 生成 Controller、Service、Mapper 等代码
MyBatis-Plus 代码生成器可以生成包括实体类、Mapper 接口、Service 和 Controller 等多种代码。通过 PackageConfig 和 StrategyConfig 可以选择需要生成的代码类型。
packageConfig.setController("controller"); // Controller 包名
packageConfig.setService("service"); // Service 包名
packageConfig.setMapper("mapper"); // Mapper 包名
如果不想生成某些代码(如 XML 映射文件),可以通过禁用模板来实现:
java
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null); // 禁止生成 XML 映射文件
generator.setTemplate(templateConfig);
5. 代码生成后的目录结构
执行代码生成器后,MyBatis-Plus 会根据配置生成对应的代码文件,常见的目录结构如下:
src
└── main
└── java
└── com
└── example
└── demo
├── controller
│ └── UserController.java
├── entity
│ └── User.java
├── mapper
│ └── UserMapper.java
├── service
│ ├── UserService.java
│ └── impl
│ └── UserServiceImpl.java
└── xml
└── UserMapper.xml
controller:包含 REST 风格的控制层代码。
entity:实体类文件,映射数据库表。
mapper:Mapper 接口文件,定义了数据库操作的接口。
service 和 service.impl:业务逻辑层代码。
xml:Mapper 对应的 XML 文件(如果开启 XML 生成)。
6. 自定义模板内容
如果想要根据自己的需求修改生成的代码结构或内容,可以通过自定义模板来实现。MyBatis-Plus 使用 Velocity 或 Freemarker 作为模板引擎,可以在 resources/templates 目录下编写自定义模板文件。
例如,自定义实体类模板:
#(entity)
package #if(${packageName})${packageName}.entity#end;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("${tableName}")
public class ${entityName} {
#foreach($field in $fields)
/**
* ${field.comment}
*/
@TableId
private ${field.type} ${field.name};
#end
}
然后在代码生成器配置中指定自定义模板路径:
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setEntity("/templates/custom_entity.java"); // 使用自定义的实体类模板
generator.setTemplate(templateConfig);
1
2
3
结论
MyBatis-Plus 的代码生成器是一个非常强大的工具,通过简单的配置,开发者可以快速生成项目所需的基础代码,包括实体类、Mapper、Service 和 Controller 等。它极大地提高了开发效率,特别适合数据模型复杂的项目。通过灵活的配置选项和模板自定义,开发者可以根据项目需求生成符合自己风格的代码结构,从而专注于业务逻辑的开发。