注意:本教程使用的数据库脚本、数据模型和环境信息请参考 “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 使用了自定义的模板,其他均使用内置的模板。