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,放在你生成器客戶端代碼的項目資源中:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM