Categories
Tags
API API文档 CAS CI-CD DevOps Docker ElasticSearch Everything Git GitHub GitHub Actions HTTP客户端 Java JWT Micrometer MyBatis-Plus Prometheus Python Redis RSS Spring Spring Boot Supplier Typora uni-app Vue Web Web应用 Web开发 中间件 代码生成 任务执行 任务管理 会话管理 内存模型 分布式 前端开发 协议 后端开发 图床 字符串匹配 安全认证 容器化 局域网 工具 工具类 并发容器 并发编程 开源 微服务 搜索引擎 数据库 数据科学 数据结构 数据验证 文件处理 文件服务器 日语 正则表达式 死锁 深度学习 源码分析 爬虫 版本控制 监控 算法 线程安全 线程池 缓存 脚本 自动化 自然语言处理 虚拟线程 设计模式 语言学习 部署 锁机制 面试 项目实战 高可用
673 words
3 minutes
MyBatis-Plus 代码生成器
🧱 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,运行上面这段代码后,自动生成的文件结构如下所示: 
自定义模板
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/经验分享/根据数据库生成代码/
