一、mybatis的運行分為兩大部分
1、讀取配置文件到緩存到configuration對象,用以創(chuàng)建SqlSessionFactory。
2譬胎、SqlSession的執(zhí)行過程
二、構(gòu)件SqlSessionFactory的過程
①通過XMLConfigBuilder解析配置的XML文件命锄,讀出配置參數(shù)堰乔,并將讀取的數(shù)據(jù)存入Configuration類中。
②使用Configuration對象創(chuàng)建SqlSessionFactory脐恩。
1-1構(gòu)建Configuration
作用:讀取配置文件镐侯,包括基礎(chǔ)配置的XML文件和映射器的XML文件
? ? ? ? ? ?初始化基礎(chǔ)配置
? ? ? ? ? ?提供單例
? ? ? ? ? 執(zhí)行一些重要的對象方法,初始化配置對象
通過XMLConfigBuilder構(gòu)建的驶冒。
1-2映射器的內(nèi)部組成
一般而言苟翻,一個映射器是由三個部分組成的
①MappedStatement,它保存映射器的一個節(jié)點骗污。包括我們配置的SQL崇猫、SQL的id、緩存信息需忿、resultMap诅炉、parameterType蜡歹、resultType、
languageDriver等重要配置內(nèi)容涕烧。
②SqlSource季稳,它是提供BoundSql對象的地方,它是MappedStatement的一個屬性澈魄。
③BoundSql,它是建立sql和參數(shù)的地方仲翎。它有三個常用的屬性:SQL痹扇、parameterObject、parameterMappings溯香。(對BoundSql進行適當(dāng)修改滿足我們的需求)
? ? parameterObject為參數(shù)本身鲫构。
? ? parameterMappings,描述我們的參數(shù)玫坛;參數(shù)包括屬性结笨、名稱、表達式湿镀、javaType炕吸、jdbcType、typeHandler等重要信息勉痴。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(PreparedStatement能夠通過它找到parameterObject對象的屬性并設(shè)置參數(shù))
? ? sql赫模,書寫在映射器中的sql語句
三、SqlSession的運行過程
Mapper映射是通過動態(tài)代理實現(xiàn)的蒸矛。Mapper的執(zhí)行過程是通過Executor瀑罗、StatementHandler、ParameterHandler和ResultHandler來完成數(shù)據(jù)庫的操作和返回結(jié)果雏掠。
Executor斩祭,執(zhí)行器,由他來調(diào)度StatementHandler乡话、ParameterHandler摧玫、ResultHandler
StatementHandler,使用數(shù)據(jù)庫的statement執(zhí)行操作
ParameterHandler蚊伞,Sql對參數(shù)的處理
ResultHandler席赂,對最后的數(shù)據(jù)集的封裝返回處理。
3-1執(zhí)行器
mybatis將根據(jù)配置類型去確定你要創(chuàng)建三種執(zhí)行器中的哪一種时迫。BatchExecutor颅停、ReuseExecutor、SimpleExecutor
根據(jù)Configuration來構(gòu)建StatementHandler掠拳,調(diào)用StatementHandler的prepare()進行預(yù)編譯和基礎(chǔ)設(shè)置癞揉,然后通過StatementHandler的parameterize()來設(shè)置參數(shù),resultHandler再組裝查詢結(jié)果返回給調(diào)用者完成一次查詢。
3-2數(shù)據(jù)庫會話器
StatementHandler也分為三種喊熟。 SimpleStatementHandler 柏肪、PreparedStatementHandler 、CallableStatementHandler?