mybatis的Configuration詳解

上一篇介紹了mybatis中SqlSessionFactory的創建過程,今天來學習它默認實現中的唯一屬性Configuration。

回顧

還是最開始的mybatis源碼環境中的測試代碼如下圖:

1測試代碼.png

利用mybatis查出數據只用三步:創建SqlSessionFactory、通過SqlSessionFactory創建SqlSession、SqlSession執行selectOne方法。

上一篇文章梳理了SqlSessionFactory創建過程的源碼,發現它返回的是它的默認實現類DefaultSqlSessionFactory,而默認實現類有有唯一的一個屬性configuration,所以SqlSessionFactory根本的依賴還是Configuration類。

Configuration基礎信息說明

Configuration類中有很多的屬性,下面是基礎屬性的源碼以及部分說明如下圖:

2基本屬性.png

上面主要是一些settings屬性,settings屬性是MyBatis 的基礎性設置,它們會改變 MyBatis 的運行時行爲。更加完整的說明在官方文檔上:https://mybatis.org/mybatis-3/zh/configuration.html。去掉zh可以查看英文版本。

這裏面有一個熟悉protected Properties variables = new Properties();這個屬性對應是我們在mybatis配置文件中有時會配置的properties節點的內容,有時候我們會配置url、driver、username、password等信息。然後在其他節點使用${}來使用。

擴展屬性和無參構造

上面介紹了決定mybatis一些基礎行爲的屬性,在Configuration還存有一些mybatis可用來擴展的和運行中需要信息,下圖中是這些屬性已經Configuration的無參構造函數:
3集合無參構造.png

上一節是mybatis中的環境配置信息,而上圖是一些mybatis運行中要用到的信息,比如:resultMap集合、sql語句集合、插件列表、緩存、類型別名、類型處理器等。

其中很多屬性使用的是Configuration中的了一個內部靜態類StrictMap,它繼承自HashMap,對HashMap的裝飾在於增加了put時防重複的處理,get時取不到值時候的異常處理,這樣在使用時就不需要關心各種異常,簡化應用層邏輯。

Configuration的無參構造函數主要往typeAliasRegistry中put了一些數據,typeAliasRegistry是類型註冊器,通過這段代碼知道爲什麼可以在配置文件中配置「」這類信息了,因爲通過type的值能夠找到對應的類。

再看parse方法

在上一篇文章SqlSessionFactory創建過程中講到了Configuration是通過無參構造函數創建了一個Configuration對象,然後在最後調用了parse方法。無參構造函數上一節已經進行了說明,最後再來看上一篇文章最後的parse方法調用的parseConfiguration方法如下圖:

4解析xml.png

這次在看parseConfiguration方法中的內容就更加清楚在幹嘛了。

總結

今天只梳理了Configuration中包含的屬性以及默認構造函數,分析完成後最終還是指向了上一篇文章的parseConfiguration方法,那麼從下一篇文章開始就來仔細分析一下parseConfiguration對Configuration具體做了哪些設置以及流程。

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