上一篇介紹了Configuration的properties和settings,接下來繼續。程序員
設置別名
別名也是mybatis中最重要的配置之一,能夠經過很簡單的一個字符串來代替一個Class,它能夠減小不少的重複代碼,別名類的源碼以下圖:數組
能夠看到它底層數據結構是一個map,而且初始化的時候已經把常見的別名設置到map中了,在前面講到的Configuration的初始化時,也設置了不少好比JDBC、POOLED、SLF4J、LOG4J等。數據結構
在mybatis的配置文件中也能夠設置別名,別名的配置及解析源碼以下圖:mybatis
經過在配置文件的typeAliases節點上設置別名,在其餘地方能夠很方便的使用了,不只是在mapper文件中,在配置文件中transactionManager 節點的type屬性JDBC也是應該設置了別名,以及dataSource節點的 type對應的POOLED都是由於Configuration在初始化時中設置了別名。app
須要注意的是在配置文件中typeAliases支持兩種設置一種是package配置一種是簡單的typeAliases,package配置的信息被設置到了configuration屬性的typeAliasRegistry屬性中,而普通配置的是放到當前XMLConfigBuilder對象的typeAliasRegistry屬性中,package配置能夠把指定包下面的類都加入進來,源碼實現以下圖:學習
沒有指定別名的會只有註解或者類的簡單名稱做爲key。ui
插件與對象工廠配置
首接下來解析的是插件和建立對象的工廠類配置,源碼與註釋以下圖:spa
插件會根據配置的地址初始化成Interceptor的實現類放到configuration的interceptorChain屬性中,InterceptorChain類維護一個Interceptor集合,插件這一塊後面會專門去學習,這裏就先了解是如何保存進去的,而且能夠知道自定義的插件都必需要實現Interceptor接口才行。插件
接下來是三個配置是設置configuration的objectFactory、objectWrapperFactory、reflectorFactory三個屬性:對象
objectFactory是MyBatis建立結果對象時使用的工廠類;
objectWrapperFactory是MyBatis對結果對象進行包裝的工廠;
reflectorFactory是mybatis中加載配置文件中的各類插件類時使用的反射工廠;
這三個屬性在configuration都有默認實現,通常不作修改,後面使用到能夠了解下,只須要知道咱們也能夠自定義mybatis返回結果的封裝就行。
environments節點解析
接下來是environments節點解析,解析源碼以下:
從上圖源碼咱們能夠總結出來幾個關鍵的地方:
首先是environments節點的default屬性會讀取給到當前XMLConfigBuilder對象的environment屬性;
而後是遍歷子節點environment,子節點的id必須等於上一步的保存的environment才能加到configuration的environment屬性中,因此咱們能夠在配置文件中設置不一樣環境environment節點,經過不一樣的id區分,在environments指定就行;
Environment的初始化主要是事務工廠和數據源的初始化。一樣咱們先知道它是如何產生的以及存放的位置,在後面使用的時候再來具體學習。
總結
今天主要是梳理了別名、插件和environment的設置,別名的多種配置方式,這裏還留有一個疑問就是兩種方式別名存儲的位置爲何不一樣。
而後就是插件了,目前插件是放到插件的一個數組當中的,同時插件必需要實現指定的接口。
而environment能夠同時設置多個,可是隻有指定的id那個太能設置到configuration中。
configuration的配置設置仍是最後一點了,下篇文章完成。
Java程序員平常學習筆記,如理解有誤歡迎各位交流討論!