本篇博客将介绍如何自定义MybatisPlus生成模板,读者可从文中获取到以下知识:
最后,分享一个本人实现的MybatisPlus自设模板,相关代码已开源在gitee,可以作为一个比较好的初始化项目使用CURD_Templates
正文部分,将分成以下板块:
首先,要使用MybatisPlus的模板,需要导入其定义的模板依赖,版本必须与MybatisPlus依赖一致,否则会出现一些预料之外的错误:
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-generatorartifactId>
<version>3.4.0version>
dependency>
模板要正常工作,还需要模板的解释器,这里有不同的选择,常用的是两种:
解释器的规则并不通用,所以只能择其一介绍,这里我以velocity为例,导入依赖
<dependency>
<groupId>org.apache.velocitygroupId>
<artifactId>velocity-engine-coreartifactId>
<version>2.2version>
dependency>
去外部库里找到generator依赖的jar包,里面有一个templates文件夹,这就是MybatisPlus所使用的默认模板

选择其中以.vm为后缀的模板文件,取出放置在/resources文件夹下的同名templates下,获取MVC各层的原始模板工作就算完成了,可以开始做定制化处理
一个自动生成控制器主要包括:
// 1.代码生成器
AutoGenerator mpg = new AutoGenerator();
mpg.execute();
六处配置的详细信息可以参看gitee项目中给出的自动生成控制器实现,里面有详细的配置与注释,这里由于篇幅所限,不展开说明,仅在第三部分介绍一些自设案例时,对涉及到的配置进行简要说明
我们以实体模板entity.java.vm为例,来看看变量获取与函数控制规则相关的内容
#foreach($field in ${table.fields})
#if((${field.propertyName}=="createUser")||(${field.propertyName}=="createTime"))
/**
* 自设功能:对createUser,createTime字段增加注解插入时自动填充(需搭配AutoInitField对象使用)
* 设置LocalDateTime的Dateformat,避免返回"yyyy-MM-dd'T'HH:mm:ss"的默认形式
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@TableField(fill = FieldFill.INSERT)
#end
private ${field.propertyType} ${field.propertyName};
#end
上面是我对实体类自定义的一段修改,其作用是:
@JsonFormat和@TableField注解上述代码体现了:
${field.propertyName}特点1:进行访问的URI设置完全遵循RESTful风格,可以方便地对接前端
特点2:提供了一些常见的controller层功能
特点3:有完整的异常记录
这个案例很有意思,它涉及到模板引擎的一个重要知识点:
在MybatisPlus所提供的代码生成控制器中,有一项InjectionConfig,在其官方文档中,便为我们提供了如何进行自定义配置的方法:
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {}
};
// 自定义配置参数
HashMap<String, Object> cfgParamsMap = new HashMap<>();
cfgParamsMap.put("uniqueKey", 1); // 1代表数据库启用了unique_key或是不需要重复检测;0代表数据库未启用unique_key,代码将自动生成重复检测
cfg.setMap(cfgParamsMap);
#if($cfg.uniqueKey==0)
// 执行重复检测
#end
这个案例主要展现变量引用的相关知识
模板中的定义截图:

controller.java中具体生成的对应代码

模板中,${swagger2}属于自动生成控制器的全局配置,通过下面的代码开启或关闭(其他配置同理,在对应的配置模块通过声明启用相应配置):
globalController.setSwagger2(true or false);
如果觉得有需要,请读者前往gitee仓库获取该项目