MyBatis的應用都是以一個SqlSessionFactory的實例為中心的,SqlSessionFactory的實例可以通過SqlSessionFactoryBuilder來獲得。
但SqlSessionFactory是一個接口,它的里面其實就有兩個方法:OpenSession、getConfiguration;其中,Opensession方法就是為了獲取一個SqlSession對象
,完成必要數據庫的增刪改查功能,但是SqlsessionFactory屬性太少了,所以需要getConfiguration的配合;來配置mapper映射文件、SQL參數、返回值類型、緩存等屬性。
MyBatis在初始化SqlSessionFactoryBean的時候,找到配置需要掃描的基本包路徑,去解析里面所有的XML。重點就在如下兩個地方:
1、創建SqlSource
Mybatis會把每個SQL標簽封裝成SqlSource對象。然后根據SQL語句的不同,分為動態SQL和靜態SQL。其中靜態SQL包含一段String類型的SQL語句;而動態SQL 由一個SqlNode組成
2、創建MapperedStatement
XML中的每一個SQL標簽就對應一個MapperedStatement對象,這里有兩個屬性很重要
Id 全限定類名+方法組成的ID。
sqlSource 當前SQL標簽對應的SqlSource對象。創建完MapperedStatement對象,會將它緩存到Configuration#MapperedStatement中。
由圖所示,當我們執行MyBatis方法的時候 就通過 全限定類名+方法名 找到MapperedStatement 對象,然后執行里面的sql內容,執行即可