注意:本教程使用的数据库脚本、数据模型和环境信息请参考 “MyBatis Plus环境准备” 章节,点击下载示例源码。
前面章节介绍了 MyBatis Plus 代码生成器 AutoGenerator 的基本用法,本章节将介绍怎样自定义代码生成器模板。在自定义模板之前,我们可以参考一下 MyBatis Plus 给我们提供的默认模板。模板位置如下:

本章节将参考 entity.java.ftl 模板,然后自定义自己的 entity2.java.ftl 模板。自定义模板内容如下:
package ${package.Entity};
// 忽略包导入,这里只是测试自定义模板
/**
* 自定义模板
* @author ${author}
* @since ${date}
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class ${entity} implements Serializable {
private static final long serialVersionUID = 1L;
<#-- ---------- BEGIN 字段循环遍历 ---------->
<#list table.fields as field>
private ${field.propertyType} ${field.propertyName};
</#list>
<#------------ END 字段循环遍历 ---------->
}设置自定义模板的核心 Java 代码如下:
// 配置自定义模板
// 怎样指定自定义模板路径?
// 如果你的模板位于 /resources/templates/entity2.java.ftl (或者.vm)
// 注意:模板名称不要带上.ftl(或者.vm), MB会根据使用的模板引擎自动识别
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setEntity("templates/entity2.java"); // 配置 entity 模板
mpg.setTemplate(templateConfig); // 配置自定义模板除了可以配置自定义 entity 实体模板,我们还可以配置如下模板:
mapper 模板:templateConfig.setMapper("templates/mapper.java")
mapper.xml 模板:templateConfig.setXml("templates/mapper2.xml");
service 模板:templateConfig.setService("templates/service2.java")
service impl 模板:templateConfig.setServiceImpl("templates/serviceImpl2.java")
controller 模板:templateConfig.setController("templates/controller.java")
(1)自定义 entity2.java.ftl 模板,该模板的位置 templates/entity2.java.ftl。模板代码如下:
package ${package.Entity};
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.sql.Blob;
import java.time.LocalDate;
/**
* 自定义模板
* @author ${author}
* @since ${date}
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class ${entity} implements Serializable {
private static final long serialVersionUID = 1L;
<#-- ---------- BEGIN 字段循环遍历 ---------->
<#list table.fields as field>
private ${field.propertyType} ${field.propertyName};
</#list>
<#------------ END 字段循环遍历 ---------->
}(2)客户端代码如下:
package com.hxstrive.mybatis_plus.generator.demo2;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
public class MysqlGenerator {
public static void main(String[] args) {
String userDir = System.getProperty("user.dir");
System.out.println("userDir=" + userDir);
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/mybatis-plus-learn/src/main/java");
gc.setAuthor("hxstrive"); // 作者名称
gc.setBaseResultMap(true); // mapper.xml 生成 ResultMap
gc.setBaseColumnList(true); // mapper.xml 生成 ColumnList
gc.setOpen(false);
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/mybatis_test?useSSL=false");
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("aaaaaa");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.hxstrive.mybatis_plus.auto");
mpg.setPackageInfo(pc);
// 配置模板
// 指定自定义模板路径, 位置:/resources/templates/entity2.java.ftl(或者是.vm)
// 注意不要带上.ftl(或者是.vm), 会根据使用的模板引擎自动识别
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setEntity("templates/entity2.java");
mpg.setTemplate(templateConfig); // 配置自定义模板
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
strategy.setInclude("user");
strategy.setControllerMappingHyphenStyle(true);
strategy.setTablePrefix(pc.getModuleName() + "_");
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}运行客户端代码,输出结果如下:
userDir=D:\learn\JavaDatabase\MyBatis\mybatis-workspaces 13:09:51.765 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator - ==========================准备生成文件...========================== 13:09:53.017 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 创建目录: [D:\learn\JavaDatabase\MyBatis\mybatis-workspaces/mybatis-plus-learn/src/main/java\com\hxstrive\mybatis_plus\auto\entity] 13:09:53.029 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 创建目录: [D:\learn\JavaDatabase\MyBatis\mybatis-workspaces/mybatis-plus-learn/src/main/java\com\hxstrive\mybatis_plus\auto\controller] 13:09:53.050 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 创建目录: [D:\learn\JavaDatabase\MyBatis\mybatis-workspaces/mybatis-plus-learn/src/main/java\com\hxstrive\mybatis_plus\auto\mapper\xml] 13:09:53.055 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 创建目录: [D:\learn\JavaDatabase\MyBatis\mybatis-workspaces/mybatis-plus-learn/src/main/java\com\hxstrive\mybatis_plus\auto\service\impl] 13:09:53.475 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:templates/entity2.java.ftl; 文件:D:\learn\JavaDatabase\MyBatis\mybatis-workspaces/mybatis-plus-learn/src/main/java\com\hxstrive\mybatis_plus\auto\entity\User.java 13:09:53.491 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/mapper.java.ftl; 文件:D:\learn\JavaDatabase\MyBatis\mybatis-workspaces/mybatis-plus-learn/src/main/java\com\hxstrive\mybatis_plus\auto\mapper\UserMapper.java 13:09:53.522 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/mapper.xml.ftl; 文件:D:\learn\JavaDatabase\MyBatis\mybatis-workspaces/mybatis-plus-learn/src/main/java\com\hxstrive\mybatis_plus\auto\mapper\xml\UserMapper.xml 13:09:53.531 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/service.java.ftl; 文件:D:\learn\JavaDatabase\MyBatis\mybatis-workspaces/mybatis-plus-learn/src/main/java\com\hxstrive\mybatis_plus\auto\service\IUserService.java 13:09:53.543 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/serviceImpl.java.ftl; 文件:D:\learn\JavaDatabase\MyBatis\mybatis-workspaces/mybatis-plus-learn/src/main/java\com\hxstrive\mybatis_plus\auto\service\impl\UserServiceImpl.java 13:09:53.628 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/controller.java.ftl; 文件:D:\learn\JavaDatabase\MyBatis\mybatis-workspaces/mybatis-plus-learn/src/main/java\com\hxstrive\mybatis_plus\auto\controller\UserController.java 13:09:53.628 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator - ==========================文件生成完成!!!==========================
根据输出结果可知,除了 entity 使用了自定义的模板,其他均使用内置的模板。