mybatis將幾列合為數組,mybatis 遍歷數組_Mybatis中別名、插件與數據源配置

 2023-10-08 阅读 30 评论 0

摘要:上一篇介紹了Configuration的properties和settings,接下來繼續。設置別名別名也是mybatis中最重要的配置之一,可以通過很簡單的一個字符串來代替一個Class,它可以減少很多的重復代碼,別名類的源碼如下圖:可以看到它底層數據結構是一個map&

上一篇介紹了Configuration的properties和settings,接下來繼續。

設置別名

別名也是mybatis中最重要的配置之一,可以通過很簡單的一個字符串來代替一個Class,它可以減少很多的重復代碼,別名類的源碼如下圖:

d99425e9a84fa595ef33b3773ae3d684.png

可以看到它底層數據結構是一個map,并且初始化的時候已經把常見的別名設置到map中了,在前面講到的Configuration的初始化時,也設置了很多比如JDBC、POOLED、SLF4J、LOG4J等。

在mybatis的配置文件中也可以設置別名,別名的配置及解析源碼如下圖:

4962fb280a1f1fbcb679ee8a4ea6596d.png

通過在配置文件的typeAliases節點上設置別名,在其他地方可以很方便的使用了,不僅是在mapper文件中,在配置文件中transactionManager 節點的type屬性JDBC也是應該設置了別名,以及dataSource節點的 type對應的POOLED都是因為Configuration在初始化時中設置了別名。

需要注意的是在配置文件中typeAliases支持兩種設置一種是package配置一種是簡單的typeAliases,package配置的信息被設置到了configuration屬性的typeAliasRegistry屬性中,而普通配置的是放到當前XMLConfigBuilder對象的typeAliasRegistry屬性中,package配置可以把指定包下面的類都加入進來,源碼實現如下圖:

773559d9ffeb37ab09ba9bfe302775bf.png

沒有指定別名的會只有注解或者類的簡單名稱作為key。

插件與對象工廠配置

首接下來解析的是插件和創建對象的工廠類配置,源碼與注釋如下圖:

17ab472a34496a4c38ebd693492ee19f.png

插件會根據配置的地址初始化成Interceptor的實現類放到configuration的interceptorChain屬性中,InterceptorChain類維護一個Interceptor集合,插件這一塊后面會專門去學習,這里就先了解是如何保存進去的,并且可以知道自定義的插件都必須要實現Interceptor接口才行

接下來是三個配置是設置configuration的objectFactory、objectWrapperFactory、reflectorFactory三個屬性:

objectFactory是MyBatis創建結果對象時使用的工廠類;

objectWrapperFactory是MyBatis對結果對象進行包裝的工廠;

reflectorFactory是mybatis中加載配置文件中的各種插件類時使用的反射工廠;

這三個屬性在configuration都有默認實現,一般不做修改,后面使用到可以了解下,只需要知道我們也可以自定義mybatis返回結果的封裝就行。

environments節點解析

接下來是environments節點解析,解析源碼如下:

de6c43bdb23453bb11696ae23fcdc26c.png

從上圖源碼我們可以總結出來幾個關鍵的地方:

首先是environments節點的default屬性會讀取給到當前XMLConfigBuilder對象的environment屬性;

然后是遍歷子節點environment,子節點的id必須等于上一步的保存的environment才能加到configuration的environment屬性中,所以我們可以在配置文件中設置不同環境environment節點,通過不同的id區分,在environments指定就行

Environment的初始化主要是事務工廠和數據源的初始化。同樣我們先知道它是如何產生的以及存放的位置,在后面使用的時候再來具體學習。

總結

今天主要是梳理了別名、插件和environment的設置,別名的多種配置方式,這里還留有一個疑問就是兩種方式別名存儲的位置為什么不同。

然后就是插件了,目前插件是放到插件的一個數組當中的,同時插件必須要實現指定的接口。

而environment可以同時設置多個,但是只有指定的id那個太能設置到configuration中。

configuration的配置設置還是最后一點了,下篇文章完成。

Java程序員日常學習筆記,如理解有誤歡迎各位交流討論!

713fd3a80413f79c03abf5b33330f268.png

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/129799.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息