JavaShuo
欄目
標籤
mybatis-generator相關(二)
時間 2019-12-06
標籤
mybatis
generator
相關
欄目
MyBatis
简体版
原文
原文鏈接
上一篇對
mybatis-generator-core
源碼的基礎修改做了說明,也能夠說是最想改的地方,這一篇將在此基礎上再作進一步的修改。
首先說說上一篇最後提到的關於自定義註釋的問題,想實現這個功能就須要修改
org.mybatis.generator.internal.DefaultCommentGenerator
這個類。我將裏面一些主要的方法講下。
addJavaFileComment(CompilationUnit compilationUnit)
給
Java
文件加註釋,這個註釋是在文件的頂部,也就是
package
上面。
addComment(XmlElement xmlElement)
給生成的
XML
文件加註釋。大象將這個方法清空了,不生成註釋。
addClassComment(InnerClass innerClass,IntrospectedTable introspectedTable)
Java
類的類註釋。
請注意紅線的
getRemarks()
方法,這個
remarks
屬性在原來的
FullyQualifiedTable
裏面是沒有的,這是大象本身加上去的,就是爲了保存表的註釋信息。那是在哪裏加進去的呢?請看
org.mybatis.generator.internal.db.DatabaseIntrospector
這個類,大概瀏覽下就會發現,數據庫表以及列的信息讀取,類型設置都是由它來完成的,定位到
608
行,正好這裏是個空行,插入幾行代碼。以下:
這樣咱們就取到了表的註釋信息,看到這裏應該就會明白了吧?
另外我須要說明的是,想經過
databaseMetaData
.
getTables()
來得到表註釋的童鞋,這個作法是沒用的,大象已經試過了,這個結果集裏面的
rs.getString(
"REMARKS"
)
獲得的是一個空字符串,什麼都木有。並且大象還想吐槽下,網上一大堆說返回的這個結果集是
10
列,呵呵,是的麼?我
debug
了很久發現它仍是隻有
5
列,不知道這
10
列是從哪來的,請打印出
10
列的童鞋告之是怎麼作的,我用的
mysql
驅動是
5.1.29
addFieldComment(Field field, IntrospectedTable introspectedTable,IntrospectedColumn introspectedColumn)
Java
屬性註釋。註釋爲空就不給屬性添加。
addGetterComment(Method method,IntrospectedTable introspectedTable,IntrospectedColumn introspectedColumn)
給
getter
方法加註釋。這裏添加註釋的方法和
Field
同樣,大象把這個方法以及
addSetterComment
方法都清空了,由於我比較習慣把註釋加到屬性上面,若是你習慣在
getter
方法上面加註釋能夠自行改一下。
上面這些修改作完後,記得要在
org.mybatis.generator.codegen.mybatis3.model.BaseRecordGenerator
的
61
行增長下面這行代碼:
commentGenerator.addClassComment(topLevelClass,
introspectedTable
);
由於
mybatis-generator
源碼中原本就是不加類註釋的。
你們都在不一樣的公司,要求確定都不同,大象無法知足全部人,只對該類作了必定程度的修改,姑且把它當作一個示例模板吧,主要是弄明白怎麼改就成了。
mybatis-generator
在
1.3.2
版裏對生成
xml
的
namespace
做了修改,再也不用表名當爲
namespace
的值,而是用包結構
+
類名
+Mapper
後綴的形式設置,大象不喜歡這麼複雜作法,因此這裏須要改一改,只保留類名
+Mapper
的命名形式。去掉
org.mybatis.generator.api.IntrospectedTable
類的
907
行與
908
行代碼。
接下來再來講說對大對象類型的處理,
mybatis-generator
默認會把全部
jdbcType
爲:
BINARY
、
BLOB
、
CLOB
、
LONGVARBINARY
、
LONGVARCHAR
、
VARBINARY
這些類型都做爲大對象,反應出來的效果就是生成的
pojo
類會多一個類名
+WithBLOBs.java
的文件
(
含有的大對象個數大於
1
時
)
,而在
XML
裏面也會增長一個
id
爲
ResultMapWithBLOBs
的
resultMap
,它繼承
BaseResultMap
,大象一貫喜歡簡單的風格,這看得太不爽了。若是你以爲無所謂,不須要修改,請跳過這段往下看。
表中的
text
或
blob
等類型,經過
databaseMetaData
.
getColumns()
取出來後,它的
rs.getInt(
"DATA_TYPE"
)
值是與
java.sql.Types
對應的。
text
類型的值:
Types.
LONGVARCHAR
blob
類型是
值:
Types.
LONGVARBINARY
它用
org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl
解析
java
類型與
jdbc
類型,而後設置到
org.mybatis.generator.api.IntrospectedColumn
的
jdbcTypeName
屬性裏,最關鍵的地方到了,
IntrospectedColumn
類第
156
行有個
isBLOBColumn()
方法,它就是用來判斷是否生成
xxxWithBLOBs.java
和
ResultMapWithBLOBs
的條件。固然
mybatis-generator
不會這麼直接用,它在裏面定義了一個
Rules
接口,由它來統一進行調用。因此咱們只須要把
isBLOBColumn()
裏面的代碼都去掉,直接返回
false
就能夠了
,再結合配置文件中的
columnOverride
屬性就能達到目的。
jdbcType
指定的值就是生成
xml
後
result
裏面對應的類型,
javaType
與生成的
pojo
裏面屬性類型一致,這裏其實能夠不定義
javaType
,可是當數據庫的表字段有的定義爲
tinyint
時,若是不給它指定類型,那麼默認生成的
java
類型就是
java.lang.Byte
,假如你想轉換類型,並且保證不會超出字段類型的大小限制,那麼你能夠將它的
javaType
設爲
java.lang.Integer
通過這麼一番修改以後,輸出結果已經比較理想了,可是
xml
文件看上去仍是有點問題,元素與元素之間沒空行,看起來好彆扭。恩,這裏要給它加上空行,因此請找到
org.mybatis.generator.api.dom.xml.XmlElement
類的
getFormattedContent
方法,這個方法有個參數:
indentLevel
,經過名字咱們能夠很直觀的理解它的做用就是來控制縮進等級,它的初始值爲
0
,這表示不縮進,當變成
1
時就是縮進一級,也即縮進四個空格,後面以此類推,咱們應該還注意到,方法內部用到了遞歸,因此它是從最底元素開始,再一步步返回,因此咱們就應該在
indentLevel
爲
1
的元素後面加上換行。
在生成
xml
的文件裏面,咱們看到有一個
update
元素,
id
爲
updateByPrimaryKey
,這個基本上用不到,可是你還不能在
table
里加上
enableUpdateByPrimaryKey
=
"false"
,若是你這麼作,雖然
updateByPrimaryKey
沒有了,但
updateByPrimaryKeySelective
也會消失。因此這時
請看看
org.mybatis.generator.codegen.mybatis3.xmlmapper.XMLMapperGenerator
這個類,
getSqlMapElement()
裏面,有大量的
addXXX
方法,這些方法裏面每一個都用到了
Rules
規則來處理是否執行,好比咱們在
table
裏面加了
enableDeleteByExample
=
"false"
,它對應的是
addDeleteByExampleElement()
,而它又調用了
introspectedTable.
getRules().generateDeleteByExample()
方法,再進入到
generateDeleteByExample()
裏面,咱們能夠看到紅線部分,上一篇大象講過,在加載配置文件的時候,
TableConfiguration
會將
table
中的這些屬性設置到對應的屬性裏,因此說其實最後仍是回到了判斷
enableDeleteByExample
的布爾值上面。
上面囉嗦了一大堆,如今再來解決以前提到的問題,如何去掉
id
爲
updateByPrimaryKey
的
update
元素,註釋掉
addUpdateByPrimaryKeyWithoutBLOBsElement()
或直接去掉這行代碼,跟蹤代碼你會發現,它和
addUpdateByPrimaryKeySelectiveElement()
的
rules
驗證裏面都用到了
enableUpdateByPrimaryKey
的值。或者你不想採起我說的這個辦法,而是改
BaseRules
的
generateUpdateByPrimaryKeyWithoutBLOBs()
,讓它直接返回
false
最後大象再嘮叨一句,這些
addXXX
方法的順序決定了生成
xml
文件中的元素順序,因此有代碼潔癖的人能夠做下調整。
上一篇加這一篇都是講怎麼少許的改動源碼以實現自定義文件輸出,寫的比較凌亂,不是很系統,徹底是從實用的角度出發,關鍵仍是大象水平有限,有什麼錯誤還請你們幫我指出來,謝謝!
改了這麼多
,總要看下效果吧,下一篇大象將寫個測試看看生成的結果,而後用
maven
assembly
將它打包生成一個
zip
,它將包含:
相關文章
1.
redis相關(二)
2.
mybatisgenerator配置文件
3.
二=進=制=相=關
4.
多元迴歸與相關------(二)多元相關和偏相關
5.
mybatisgenerator自定義註釋
6.
springboot + mybatis + mybatisGenerator使用教程
7.
eclipse集成MybatisGenerator及使用
8.
二叉樹相關題目
9.
Hadoop 相關知識點(二)
10.
bert模型相關(二)
更多相關文章...
•
XML 相關技術
-
XML 教程
•
Hibernate的二級緩存
-
Hibernate教程
•
NewSQL-TiDB相關
•
RxJava操作符(二)Transforming Observables
相關標籤/搜索
mybatisgenerator
相關
mysql8+mybatisgenerator
息息相關
相關資源
HOSTS相關
系統相關
相關性
不相關
相關者
MyBatis
MySQL教程
NoSQL教程
Hibernate教程
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
js中 charCodeAt
2.
Android中通過ViewHelper.setTranslationY實現View移動控制(NineOldAndroids開源項目)
3.
【Android】日常記錄:BottomNavigationView自定義樣式,修改點擊後圖片
4.
maya 文件檢查 ui和數據分離 (一)
5.
eclipse 修改項目的jdk版本
6.
Android InputMethod設置
7.
Simulink中Bus Selector出現很多? ? ?
8.
【Openfire筆記】啓動Mac版Openfire時提示「系統偏好設置錯誤」
9.
AutoPLP在偏好標籤中的生產與應用
10.
數據庫關閉的四種方式
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
1.
redis相關(二)
2.
mybatisgenerator配置文件
3.
二=進=制=相=關
4.
多元迴歸與相關------(二)多元相關和偏相關
5.
mybatisgenerator自定義註釋
6.
springboot + mybatis + mybatisGenerator使用教程
7.
eclipse集成MybatisGenerator及使用
8.
二叉樹相關題目
9.
Hadoop 相關知識點(二)
10.
bert模型相關(二)
>>更多相關文章<<