解放双手!MyBatis-Plus代码生成器3分钟上手指南
你还在手动编写CRUD代码吗?还在为实体类与数据库表字段不匹配而烦恼吗?MyBatis-Plus代码生成器(Code Generator)让这一切成为历史!本文将带你快速掌握这个自动化开发利器,从配置到生成只需3步,让你专注于业务逻辑而非重复劳动。
为什么选择代码生成器?
传统开发中,我们需要为每个数据库表手动创建实体类(Entity)、数据访问接口(Mapper)、服务层(Service)和控制器(Controller),不仅耗时费力,还容易出错。MyBatis-Plus代码生成器通过读取数据库表结构,自动生成标准代码,支持多种模板引擎,可高度自定义输出内容。
核心优势:
- 零重复劳动:自动生成全套CRUD代码
- 多模板支持:Velocity、Freemarker、Beetl等多种模板引擎
- 高度可配置:支持自定义模板、文件路径、代码风格
- 无缝集成:与MyBatis-Plus核心功能深度整合
核心架构解析
代码生成器的核心实现位于mybatis-plus-generator模块,主要由模板引擎抽象类和具体实现类组成。
模板引擎架构
抽象模板引擎类AbstractTemplateEngine定义了代码生成的核心流程,包括初始化配置、输出各类文件(实体、Mapper、Service等)和模板渲染等方法:
主要方法:
init():初始化配置构建器batchOutput():批量输出所有文件outputEntity()/outputMapper()/outputService()/outputController():输出各类文件getObjectMap():构建模板渲染所需的数据模型
具体模板引擎实现类如VelocityTemplateEngine则负责实际的模板渲染工作:
快速上手步骤
步骤1:添加依赖
在项目的构建文件中添加MyBatis-Plus代码生成器依赖。以Maven为例:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>最新版本</version>
</dependency>
<!-- 模板引擎依赖,选择一个即可 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
步骤2:编写配置类
创建代码生成器配置类,设置数据源、全局配置、包配置、策略配置等:
public class CodeGenerator {
public static void main(String[] args) {
// 1. 创建代码生成器
AutoGenerator mpg = new AutoGenerator();
// 2. 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("your name"); // 作者
gc.setOpen(false); // 生成后是否打开文件夹
gc.setServiceName("%sService"); // 去掉Service接口的"I"前缀
mpg.setGlobalConfig(gc);
// 3. 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("password");
mpg.setDataSource(dsc);
// 4. 包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName("demo"); // 模块名
pc.setParent("com.example"); // 父包名
mpg.setPackageInfo(pc);
// 5. 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setInclude("user", "order"); // 需要生成的表名
strategy.setNaming(NamingStrategy.underline_to_camel); // 数据库表映射到实体的命名策略
strategy.setColumnNaming(NamingStrategy.underline_to_camel); // 数据库表字段映射到实体的命名策略
strategy.setEntityLombokModel(true); // 实体类使用Lombok注解
strategy.setRestControllerStyle(true); // 生成@RestController控制器
mpg.setStrategy(strategy);
// 6. 执行生成
mpg.execute();
}
}
步骤3:自定义模板(可选)
如果默认生成的代码不符合需求,可以自定义模板。例如,自定义实体类模板:
- 创建自定义模板文件(如
entity.java.vm) - 在配置中指定自定义模板路径:
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setEntity("templates/entity.java.vm"); // 自定义实体模板
mpg.setTemplate(templateConfig);
高级配置技巧
多模板引擎切换
代码生成器支持多种模板引擎,只需更换对应的依赖和配置即可:
// 使用Freemarker模板引擎
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
// 使用Beetl模板引擎
mpg.setTemplateEngine(new BeetlTemplateEngine());
各模板引擎实现类:
- Velocity:VelocityTemplateEngine.java
- Freemarker:FreemarkerTemplateEngine.java
- Beetl:BeetlTemplateEngine.java
- Enjoy:EnjoyTemplateEngine.java
自定义文件输出路径
通过InjectionConfig可以自定义文件输出路径和内容:
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// 自定义配置
Map<String, Object> map = new HashMap<>();
map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
this.setMap(map);
}
};
// 自定义输出配置
List<FileOutConfig> focList = new ArrayList<>();
focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义Mapper XML文件输出路径
return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
常见问题解决
中文乱码问题
确保模板引擎配置了正确的编码,以Velocity为例:
p.setProperty(Velocity.ENCODING_DEFAULT, ConstVal.UTF8);
p.setProperty(Velocity.INPUT_ENCODING, ConstVal.UTF8);
模板加载失败
检查模板路径配置是否正确,确保模板文件存在。默认模板位于:
mybatis-plus-generator/src/main/resources/templates/
代码风格不符合团队规范
通过自定义模板和策略配置调整代码风格,例如:
- 设置
strategy.setEntityColumnConstant(true)生成字段常量 - 设置
strategy.setControllerMappingHyphenStyle(true)生成连字符风格的URL - 设置
strategy.setTablePrefix("t_")忽略表前缀
实战案例
以下是使用代码生成器生成的User实体类示例:
package com.example.demo.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 用户表
* </p>
*
* @author your name
* @since 2025-10-06
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 用户名
*/
@TableField("username")
private String username;
/**
* 密码
*/
@TableField("password")
private String password;
/**
* 邮箱
*/
@TableField("email")
private String email;
/**
* 年龄
*/
@TableField("age")
private Integer age;
}
生成的Mapper接口:
package com.example.demo.mapper;
import com.example.demo.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 用户表 Mapper 接口
* </p>
*
* @author your name
* @since 2025-10-06
*/
public interface UserMapper extends BaseMapper<User> {
}
总结与展望
MyBatis-Plus代码生成器通过自动化代码生成,极大地提高了开发效率,减少了重复劳动。其灵活的配置和强大的模板引擎支持,使其能够适应各种项目需求。
随着项目的发展,代码生成器将支持更多模板引擎和更丰富的自定义选项,进一步提升开发体验。如果你还没有尝试过这个强大的工具,现在就动手试试吧!
官方文档:README.md 完整示例:mybatis-plus-generator/src/test/java/com/baomidou/demo/
提示:代码生成器源码位于mybatis-plus-generator/目录,感兴趣的同学可以深入研究其实现原理,定制更符合自己需求的代码生成逻辑。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust098- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
MiMo-V2.5-ProMiMo-V2.5-Pro作为旗舰模型,擅⻓处理复杂Agent任务,单次任务可完成近千次⼯具调⽤与⼗余轮上 下⽂压缩。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
Kimi-K2.6Kimi K2.6 是一款开源的原生多模态智能体模型,在长程编码、编码驱动设计、主动自主执行以及群体任务编排等实用能力方面实现了显著提升。Python00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00
