其他分享
首页 > 其他分享> > MybatisPlus最新代码生成器(3.5.1+)使用教程(4)——文件模板解析

MybatisPlus最新代码生成器(3.5.1+)使用教程(4)——文件模板解析

作者:互联网

简介

MybatisPlus最新代码生成器(3.5.1+)使用教程(1)——输出路径详细解析
MybatisPlus最新代码生成器(3.5.1+)使用教程(2)——输出文件名详细解析
MybatisPlus最新代码生成器(3.5.1+)使用教程(3)——指定数据库表详细解析
MybatisPlus最新代码生成器(3.5.1+)使用教程(4)——文件模板解析

禁止输出 Service 接口的方法

现在,比如有一个需求点,是6种默认输出文件中,我不想要输出 Service 接口,该怎么办呢?

我们从 execute() 作为切入点开始追踪代码:

-> execute(), com.baomidou.mybatisplus.generator.FastAutoGenerator
-> batchOutput(), com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine
-> outputService(), com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine

以下是 outputService 的源码:

第一种方式,是让 servicePath 为空,即找不到输出路径:

FastAutoGenerator.create("url", "username", "password")
    .packageConfig(builder -> builder.pathInfo(Collections.singletonMap(OutputFile.service, "")))
    .execute();

第二种方式,如果 getTemplateFilePath 能够返回空,即找不到模板文件:

FastAutoGenerator.create("url", "username", "password")
    .templateConfig(builder -> builder.service(""))
    .execute();

不过这种方式实际操作时,其实也会影响到 PathInfoHandler,导致不添加默认输出路径,而使得 servicePath 等于 null

第三种方式,让 serviceName 为空,即找不到输出文件名:

FastAutoGenerator.create("url", "username", "password")
    .strategyConfig(builder -> builder.serviceBuilder().convertServiceFileName((entityName) -> ""))
    .execute();    

不过,这三种方式,在输出得到 ServiceImpl 文件时,都会找不到对应的 Service 接口,接下来看看这个问题如何解决。

各模板文件的默认路径

首先,我们要知道 TemplateConfig 的各个属性的默认值:

成员变量 默认值 描述
entity /templates/entity.java 实体模板路径
entityKt /templates/entity.kt 实体模板路径(kotlin模板)
controller /templates/controller.java 控制器模板路径
mapper /templates/mapper.java Mapper模板路径
xml /templates/mapper.xml MapperXml模板路径
service /templates/service.java Service模板路径
serviceImpl /templates/serviceImpl.java ServiceImpl模板路径
disableEntity false 是否禁用实体模板(默认 false)

以 ServiceImpl 为例,执行 getTemplateFilePath 方法时:

最终返回值,视语言模板不同而不同:

模板引擎 追加后缀 getTemplateFilePath默认返回值(以serviceImpl为例)
VelocityTemplateEngine .vm /templates/serviceImpl.java.vm
FreemarkerTemplateEngine .ftl /templates/serviceImpl.java.ftl
BeetlTemplateEngine .btl /templates/serviceImpl.java.btl

我们可以从 mybatis-plus-generator.jar 的资源文件夹中看到以下默认模板:

修改 ServiceImpl 模板

因此,我们就可以对 ServiceImpl 模板进行一些修改,移除对 Service 的继承:

package ${package.ServiceImpl};

import ${package.Entity}.${entity};
import ${package.Mapper}.${table.mapperName};
import ${superServiceImplClassPackage};
import org.springframework.stereotype.Service;

/**
 * <p>
 * $!{table.comment} 服务实现类
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
@Service
#if(${kotlin})
open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>() {

}
#else
public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}> {

}
#end

并且把这个文件命名为 serviceImpl.java.vm,放在你生成器客户端代码的项目资源中:

标签:templates,代码生成,MybatisPlus,Service,路径,3.5,java,serviceImpl,模板
来源: https://www.cnblogs.com/kendoziyu/p/mybatis-plus_template_explanation.html