1. 讀取mybatis-config.xml的配置文件
2. 構(gòu)建一個SqlSessionFactory對象
通過SqlSessionFactoryBuilder來構(gòu)建一個SqlSessionFactory對象
3. ?進入mybatis源碼中細細解析
關(guān)鍵類:
1. SqlSessionFactoryBuilder --> 控制創(chuàng)建SqlSessionFactory的整個流程
2. XMLConfiguration --> 解析xml中的屬性
3. DefaultSqlSessionFactory --> 創(chuàng)建SqlSessionFactory
4. Configuration --> 核心類胎撇,解析后的xml文件后的數(shù)據(jù)幾乎全部都在這里
3.1 通過解析mybatis-config.xml文件來獲取一個XMLConfigBuilder的實例parser
parser中存放的是mybatis-config.xml文件中configuration節(jié)點下的整個xml樹的數(shù)據(jù)鸠蚪。
3.2 通過parser.parse()方法來把這個xml樹的數(shù)據(jù)提取到Configuration的實例中。
configguration的實例在mybatis框架中是一個單例的涛癌,是框架中的核心類,畢竟很多東西都要從Configuration中獲取碉输。
3.3 創(chuàng)建一個SqlSessionFactory實例
終于把mybatis-config.xml和眾多的sql的映射文件解析好了之后架曹,并將對應(yīng)的屬性也全部都設(shè)置到Configuration中,拿到了Configuration的實例互例,然后可以去構(gòu)造一個SqlSessionFactory實例了。
總結(jié)姓迅,這樣子就完成了一個SqlSessionFactory實例的創(chuàng)建敲霍。
備注
這時候俊马,我們來看看Configuration中一些關(guān)鍵變量值是什么
1. 1 mappedStatements是一個StrictMap(mybatis自己在HashMap上封裝的)丁存。
這個map的key有兩種形式:?
1.1.1 ?映射文件中namescape+id ?--> 全局唯一肩杈,不唯一程序直接炸錯
1.1.2 取1.1 中得到最后一個句點(.)后的單詞(StrictMap中叫做shortname) --> 短名字可能會重復,程序無所謂解寝,繼續(xù)跑
因此這個map的value也有兩種形式:
1.2.1 如果可以保證1.1.1 和 1.1.2 的規(guī)則都是全局唯一的扩然,那么value就是MappedStatement的實例。
1.2.2 如果1.1.2 沒有辦法保證是全局唯一的聋伦,那么這個短名字為key對應(yīng)的value是Ambiguity的實例夫偶。
注意:如果能夠保證1.1.2是全局唯一的,那么可以通過短名字來訪問獲取value觉增。--> 主要是方便兵拢,但實際上用處不多。個人感覺
1.2 resultMap是一個StrictMap
這個用來存儲所有映射文件xml中的resultMap節(jié)點的數(shù)據(jù)
1.3 ?loadedResources變量
用來存儲所有的映射文件的位置逾礁,和該映射文件對應(yīng)的接口的全限定名说铃。
1.4 sqlFragments
用來存儲所有的sql標簽的代碼片段,類似如下面的的這樣子嘹履。
1.5 keyGenerators
selectKey標簽個片段