上一篇介紹了Configuration的properties和settings,接下來繼續。
別名也是mybatis中最重要的配置之一,可以通過很簡單的一個字符串來代替一個Class,它可以減少很多的重復代碼,別名類的源碼如下圖:
可以看到它底層數據結構是一個map,并且初始化的時候已經把常見的別名設置到map中了,在前面講到的Configuration的初始化時,也設置了很多比如JDBC、POOLED、SLF4J、LOG4J等。
在mybatis的配置文件中也可以設置別名,別名的配置及解析源碼如下圖:
通過在配置文件的typeAliases節點上設置別名,在其他地方可以很方便的使用了,不僅是在mapper文件中,在配置文件中transactionManager 節點的type屬性JDBC也是應該設置了別名,以及dataSource節點的 type對應的POOLED都是因為Configuration在初始化時中設置了別名。
需要注意的是在配置文件中typeAliases支持兩種設置一種是package配置一種是簡單的typeAliases,package配置的信息被設置到了configuration屬性的typeAliasRegistry屬性中,而普通配置的是放到當前XMLConfigBuilder對象的typeAliasRegistry屬性中,package配置可以把指定包下面的類都加入進來,源碼實現如下圖:
沒有指定別名的會只有注解或者類的簡單名稱作為key。
首接下來解析的是插件和創建對象的工廠類配置,源碼與注釋如下圖:
插件會根據配置的地址初始化成Interceptor的實現類放到configuration的interceptorChain屬性中,InterceptorChain類維護一個Interceptor集合,插件這一塊后面會專門去學習,這里就先了解是如何保存進去的,并且可以知道自定義的插件都必須要實現Interceptor接口才行。
接下來是三個配置是設置configuration的objectFactory、objectWrapperFactory、reflectorFactory三個屬性:
objectFactory是MyBatis創建結果對象時使用的工廠類;
objectWrapperFactory是MyBatis對結果對象進行包裝的工廠;
reflectorFactory是mybatis中加載配置文件中的各種插件類時使用的反射工廠;
這三個屬性在configuration都有默認實現,一般不做修改,后面使用到可以了解下,只需要知道我們也可以自定義mybatis返回結果的封裝就行。
接下來是environments節點解析,解析源碼如下:
從上圖源碼我們可以總結出來幾個關鍵的地方:
首先是environments節點的default屬性會讀取給到當前XMLConfigBuilder對象的environment屬性;
然后是遍歷子節點environment,子節點的id必須等于上一步的保存的environment才能加到configuration的environment屬性中,所以我們可以在配置文件中設置不同環境environment節點,通過不同的id區分,在environments指定就行;
Environment的初始化主要是事務工廠和數據源的初始化。同樣我們先知道它是如何產生的以及存放的位置,在后面使用的時候再來具體學習。
今天主要是梳理了別名、插件和environment的設置,別名的多種配置方式,這里還留有一個疑問就是兩種方式別名存儲的位置為什么不同。
然后就是插件了,目前插件是放到插件的一個數組當中的,同時插件必須要實現指定的接口。
而environment可以同時設置多個,但是只有指定的id那個太能設置到configuration中。
configuration的配置設置還是最后一點了,下篇文章完成。
Java程序員日常學習筆記,如理解有誤歡迎各位交流討論!
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态