mybatis generator根據表生成帶 註釋的實體類
mybatis generator給我們開發帶來諸多方便,免去一些繁瑣的自寫mapper、dao、實體類的步驟,但是有時會根據自己需要定製自己的東西,比如生成帶註釋的實體類,這時需要我們修改generator的原始碼。
source包,建立maven專案,把源放進去。
開啟org.mybatis.generator.api.dom.java.Field類,這是生成實體檔案屬性的寫入類
找到getFormattedContent這個方法,加上這段程式碼,表示在寫入屬性名後面加上註釋。
這樣還沒不行,我們開啟org.mybatis.generator.internal.util.JavaBeansUtil類。在getJavaBeansField
這樣就完成了讀取表字段註釋寫入到實體類中。
接著我們看看如何在類名上面加上類模型對應的表名和表註釋
我們直接找到org.mybatis.generator.internal.DefaultCommentGenerator類的addModelClassComment方法,
我們直接將下面這個條件判斷註釋掉(suppressAllComents和addRemarkComents可以在generator.xml設定的屬性,我這裡暴力強制去除這個條件,具體可以自己研究。)
在下面這行表示獲取表註釋
接著定製自己的註釋樣式
把沒必要的可以註釋掉不讓生成
當我們打包後把它替換原來的jar包再用它處理生成時發覺只生成了屬性註釋,沒有對應的表註釋。
於是我們開啟連線jdbc連線資料庫的工廠類org.mybatis.generator.internal.JDBCConnectionFactory,找到getConnection這個方法
在連線屬性設定這裡加上這一行。
好!接著打包生成jar檔案,替換原來的jar包,再次執行生成。
沒問題!
但是如果我們要加上是對應哪個表要怎麼弄呢?
我們再回到org.mybatis.generator.internal.DefaultCommentGenerator類的addModelClassComment方法裡,
知道introspectedTable這個是可以獲取表屬性的一個物件,但是我們在類裡面發現並沒有能獲取表名的屬性,這時我們可以自己加上表名的屬性。
我們接著看看怎麼獲取表名名並設定到屬性裡面,
找到org.mybatis.generator.internal.db.DatabaseIntrospector這個類的enhanceIntrospectedTable方法
再這裡獲取表名和設定物件屬性
最後在addModelClassComment方法上加上如下程式碼
好的,可以了。為了防止註釋上的中文亂碼。找到org.mybatis.generator.api.MyBatisGenerator寫入實體類檔案的方法writeFile。加上UTF-8輸出流方式
最後打包替換,再次生成實體類檔案,如圖