解放双手!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/目录,感兴趣的同学可以深入研究其实现原理,定制更符合自己需求的代码生成逻辑。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




