MybatisPlus最新代碼生成器(3.5.1+)使用教程(3)——指定數據庫表詳細解析


簡介

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

前兩篇教程說明了如何通過 packageConfig 控制輸出路徑,以及通過 strategyConfig 控制輸出文件名,本文將着重說明如何指定數據庫表。

com.baomidou.mybatisplus.generator.IDatabaseQuery 是一個抽象類。它的實現類,同時也是它的內部靜態類 DefaultDatabaseQuery,重點分析它的 queryTables 方法。

因為該方法就是掃描數據庫表,並獲取所需表信息的類。

先來看一下 addInclude 的使用方法展示:

FastAutoGenerator.create("url", "username", "password")
    // addInclude 增加包含的表名,可以增加多個
    .strategyConfig(builder -> builder.addInclude("ums_administrator"))
    .execute();

接着,再來看 addExclude 的使用方法展示:

FastAutoGenerator.create("url", "username", "password")
    // addExclude 增加排除表,可以增加多個
    .strategyConfig(builder -> builder.addExclude("ums_administrator_role_relation"))
    .execute();

首先,總覽一下 queryTables() 方法:

其中,

  • String tablesSql = dbQuery.tablesSql(); 根據不同類型的數據庫獲取不同的基本查詢語句,該語句功能就就是查詢所有的數據庫表;
  • dbQuery.query 的作用,就是執行sql查詢語句,並且查詢到的每一行結果交給外層的都 Consumer 來處理。(這個類似訪問者模式)
  • dbQuery.tableSql() 則是組裝查詢所有數據庫表的sql語句;

對象 dbQuery 的類是 com.baomidou.mybatisplus.generator.config.querys.DecoratorDbQuery,它的 tableSql 方法源碼如下:

下表反映的是這段代碼涉及到的參數:

StrategyConfig可調參數 默認值 備注
enableSqlFilter true 啟用sql過濾,語法不能支持使用sql過濾表的話,可以考慮關閉此開關.
likeTable null 包含表名
notLikeTable null 不包含表名
include 指定包含表
exclude 指定不包含表

結論1: 當enableSqlFilter設置為true時,likeTable和notLikeTable配置只能二選一;同樣,include和exclude配置也只能二選一

結論2: 當enableSqlFilter設置為true時,include和exclude設置成正則表達式無效!

下面給出 likeTable 的使用示例,notLikeTable 也類似:

FastAutoGenerator.create(properties.getProperty("url"), properties.getProperty("username"), properties.getProperty("password"))
    .strategyConfig(builder -> builder.likeTable(new LikeTable("user", SqlLike.DEFAULT))) // 等於 %user%
    .execute();

new LikeTable("user", SqlLike.LEFT) // 等於 %user
new LikeTable("user", SqlLike.RIGHT) // 等於 user%

繼續來看 queryTables() 的源碼:

這段代碼,稍稍需要理解的就是這個 matchIncludeTablematchExcludeTable 方法了,跟蹤到最內層,就是

如果,用戶填寫的 include 或者 exclude,如果跟數據庫表名相同,就匹配上了,就可以把對應的 TableInfo 加入到 includeTableList 或者 excludeTableList 中了。
!!!但是,如果用戶填寫的 include 或者 exclude 是正則表達式的話,一定要把 enableSqlFilter 設置為 false!然后,如果數據表名和用戶設置的正則表達式匹配上,就算是命中了。


免責聲明!

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



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