ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-04-10 19:02:09  阅读:282  来源: 互联网

标签:templates 代码生成 MybatisPlus Service 路径 3.5 java serviceImpl 模板


简介

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有