MybatisPlus最新代碼生成器(3.5.1+)使用教程(2)——輸出文件名詳細解析


簡介

MybatisPlus最新代碼生成器(3.5.1+)使用教程(1)——輸出路徑詳細解析
MybatisPlus最新代碼生成器(3.5.1+)使用教程(2)——輸出文件名詳細解析
MybatisPlus最新代碼生成器(3.5.1+)使用教程(3)——指定數據庫表詳細解析
MybatisPlus最新代碼生成器(3.5.1+)使用教程(4)——文件模板解析

上一篇文章,我們已經了解代碼生成器(新)輸出文件的類型,及其輸出路徑的配置方法,這一篇,我們來繼續了解輸出文件名該如何修改?

首先,閱讀官方的示例代碼:

從示例代碼的注釋中,我們可以猜測到

  1. 文件名來自於數據庫表名;
  2. 文件名的自定義可以通過修改 StrategyConfig 的參數來實現;

經過初步代碼閱讀和分析,我確定了這部分邏輯就在 com.baomidou.mybatisplus.generator.config.po.TableInfo 當中。

TableInfo源碼解析

我查找了給 entityName 賦值的源碼,發現都在 TableInfoprocessTable() 方法中:

首先根據 表信息 生成 entityName,再由 entityName 轉換成各類輸出文件的名稱

entityName

@Override
public @NotNull String entityNameConvert(@NotNull TableInfo tableInfo) {
  // capitalFirst 函數的作用就是“實體首字母大寫”
  // tableInfo.getName() 返回的是數據庫的表名
  // strategyConfig.entity().getNaming() 默認值是 underline_to_camel,即“下划線轉駝峰命名”;還有一種選擇就是“不做任何改變,原樣輸出”
  return NamingStrategy.capitalFirst(processName(tableInfo.getName(), strategyConfig.entity().getNaming(), strategyConfig.getTablePrefix(), strategyConfig.getTableSuffix()));
}

對應的 客戶端代碼 配置如下:

FastAutoGenerator.create("url", "username", "password")
  .strategyConfig(builder -> {
      builder.entityBuilder().naming(NamingStrategy.underline_to_camel);
      builder.addTablePrefix("t_", "c_") // 對應上一段源碼的 strategyConfig.getTablePrefix(),作用是文件名將去掉指定的前綴
            .addTableSuffix("_relation"); // 對應上一段源碼的 strategyConfig.getTableSuffix(),作用是文件名將去掉指定的后綴
  })
  .execute();

我們設置的一個或者多個 tablePrefixtableSuffix 有什么作用呢?還得看源碼 processName 方法:

如果表名以用戶設置的tablePrefix中任何一個為前綴,entityName命名時將不包含該前綴

如果表名以用戶設置的tableSuffix中任何一個結尾,entityName命名時將不包含該后綴

以上,就是能夠影響 entityName 命名的三個參數了,如果你對此還不滿意,那就只能自定義了:

FastAutoGenerator.create("url", "username", "password")
  // customNameConvert 繼承 INameConvert(名稱轉換接口)的類的實例對象
  .strategyConfig(builder -> builder.entityBuilder().nameConvert(customNameConvert))
  .execute();

默認情況下,局部變量 entityName 就等於成員變量 entityName,當然,你也可以通過 builder.entityBuilder().convertFileName((entityName -> entityName)); 進行自定義。

Mapper和Mapper.xml文件名

  • 實體類接口名 mapperName={entityName}Mapper
  • xml文件名 xmlName={entityName}Mapper

自定義配置代碼如下:

FastAutoGenerator.create("url", "username", "password")
  .strategyConfig(builder -> builder.mapperBuilder()
      .convertMapperFileName((entityName -> entityName + "Dao"))
      .convertXmlFileName(entityName -> entityName + "Mapper"))
  .execute();

Service和ServiceImpl文件名

類似地,

  • 服務接口名 serviceName=I{entityName}Service
  • 服務接口實現類 serviceImplName={entityName}ServiceImpl

自定義配置代碼如下:

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

Controller文件名

類似地,控制器文件名/類名 controllerName={entityName}Controller

自定義配置代碼如下:

FastAutoGenerator.create("url", "username", "password")
  .strategyConfig(builder -> builder.controllerBuilder()
      .convertFileName((entityName -> entityName + "Service"))
  )
  .execute();

結論

entityName 通常可以通過 addTablePrefixaddTableSuffix 過濾掉表前綴或者表后綴:

FastAutoGenerator.create("url", "username", "password")
  .strategyConfig(builder -> {
      builder.addTablePrefix("t_", "c_") // 對應上一段源碼的 strategyConfig.getTablePrefix(),作用是文件名將去掉指定的前綴
            .addTableSuffix("_relation"); // 對應上一段源碼的 strategyConfig.getTableSuffix(),作用是文件名將去掉指定的后綴
  })
  .execute();

其他,由 entityName 衍生的文件名:

TableInfo成員變量 描述 默認命名規范
name 數據庫表名
mapperName 實體類接口名 {entityName}Mapper
xmlName Mapper.xml文件名 {entityName}Mapper
serviceName 服務接口文件名 I{entityName}Service
serviceImplName 服務接口實現類文件名 {entityName}ServiceImpl
controllerName 控制器類文件名 {entityName}Controller


免責聲明!

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



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