自定义代码生成器模板

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


说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号