673 字
3 分钟

MyBatis-Plus 代码生成器

发布于 2025-05-15

🧱 MyBatis-Plus 代码生成器#

在 Java 后端开发中,当我们面对一个数据库表时,通常需要手动编写一系列基础代码文件,如:

  • 实体类(Entity)
  • 数据访问层接口(Mapper)
  • Mapper XML 文件
  • 服务层接口与实现(Service / ServiceImpl)
  • 控制器类(Controller)

这些重复性工作不仅枯燥,还容易出错。幸运的是,MyBatis-Plus 提供了一个强大的代码生成器 ,可以帮助我们自动生成这些基础代码,大幅提升开发效率!

1. 引入依赖#

<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>

2. 编写生成器代码#

下面给出官方的代码生成器示例,请根据实际情况自行修改配置。

全新的代码生成器添加于 3.5.1 版本,且对历史版本不兼容!如果您用的是 3.5.1 以下的版本,请参考 代码生成器 进行配置与使用。

FastAutoGenerator.create("url", "username", "password")
.globalConfig(builder -> builder
.author("Baomidou")
.outputDir(Paths.get(System.getProperty("user.dir")) + "/src/main/java")
.commentDate("yyyy-MM-dd")
)
.packageConfig(builder -> builder
.parent("com.baomidou.mybatisplus")
.entity("entity")
.mapper("mapper")
.service("service")
.serviceImpl("service.impl")
.xml("mapper.xml")
)
.strategyConfig(builder -> builder
.entityBuilder()
.enableLombok()
)
.templateEngine(new VelocityTemplateEngine())
.execute();
NOTE

为了生成更加符合需求的代码,官方提供了一系列完整的配置说明,可参考代码生成器配置 | MyBatis-Plus

3. 运行并查看生成的代码#

我在数据库中预先创建了一张表item,运行上面这段代码后,自动生成的文件结构如下所示: image-20250515230041476

自定义模板#

1. 创建自定义模板目录#

在项目的 src/main/resources 下创建 templates 目录:

src/main/resources
└── templates
├── entity.java.vm # 实体类模板
├── controller.java.vm # Controller模板
└── mapper.xml.vm # Mapper XML模板

2. 修改模板内容#

以自定义实体类模板 (entity.java.vm) 为例:

## 实体类模板示例(添加Swagger和自定义注释)
package ${package.Entity};
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 实体类 - ${table.comment}
* @author ${author}
* @date ${date}
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("${table.name}")
@ApiModel("${table.comment}实体")
public class ${entity} extends ${superEntityClass} {
private static final long serialVersionUID = 1L;
## ---------- 字段循环生成 ----------
#foreach($field in ${table.fields})
#if(${field.comment})
@ApiModelProperty("${field.comment}")
#end
#if(${field.keyFlag})
@TableId(value = "${field.name}", type = IdType.${field.keyIdentityFlag})
#else
@TableField("${field.name}")
#end
private ${field.propertyType} ${field.propertyName};
#end
}

3. 配置生成器使用自定义模板#

在代码生成器中指定模板路径(默认自动识别,无需额外配置):

TemplateConfig templateConfig = new TemplateConfig.Builder()
.entity("/templates/entity.java.vm") // 指定实体类模板路径
.controller("/templates/controller.java.vm")
.build();

4. 自定义模板的关键变量#

模板中可使用的预定义变量(以 entity.java.vm 为例):

变量名说明
package.Entity实体类的包名
author全局配置中设置的作者
date当前日期(如 2024-01-01
table.comment数据库表注释
entity实体类名(如 User
superEntityClass实体类父类(如 BaseEntity
table.fields表的字段集合
field.propertyName字段对应的属性名(如 userName
field.propertyType字段对应的Java类型(如 String
field.comment字段注释
MyBatis-Plus 代码生成器
https://mj3622.github.io/posts/经验分享/根据数据库生成代码/
作者
Minjer
发布于
2025-05-15
许可协议
CC BY-NC-SA 4.0