MyBatis:MyBatis架構(gòu)原理
一、架構(gòu)設(shè)計(jì)
我們把Mybatis的功能架構(gòu)分為三層:
1、API接口層:提供給外部使用的接口API,開發(fā)?員通過這些本地API來操縱數(shù)據(jù)庫(kù)。接口層?接收到調(diào)?請(qǐng)求就會(huì)調(diào)?數(shù)據(jù)處理層來完成具體的數(shù)據(jù)處理。
MyBatis和數(shù)據(jù)庫(kù)的交互有兩種?式:
a.使用傳統(tǒng)的MyBatis提供的API;
b.使?Mapper代理的?式
2、數(shù)據(jù)處理層:負(fù)責(zé)具體的SQL查找、SQL解析、SQL執(zhí)?和執(zhí)?結(jié)果映射處理等。它主要的目的是根據(jù)調(diào)用的請(qǐng)求完成?次數(shù)據(jù)庫(kù)操作。
3、基礎(chǔ)支撐層:負(fù)責(zé)最基礎(chǔ)的功能支撐,包括連接管理、事務(wù)管理、配置加載和緩存處理,這些都是共用的東?,將他們抽取出來作為最基礎(chǔ)的組件。為上層的數(shù)據(jù)處理層提供最基礎(chǔ)的支撐。
二、主要構(gòu)建及其相互關(guān)系
三、總體流程
1、加載配置并初始化
觸發(fā)條件:加載配置?件
配置來源于兩個(gè)地?,?個(gè)是配置?件(主配置?件conf.xml,mapper?件*.xml),—個(gè)是java代碼中的注解,將主配置?件內(nèi)容解析封裝到Configuration,將sql的配置信息加載成為?個(gè)mappedstatement對(duì)象,存儲(chǔ)在內(nèi)存之中。
2、接收調(diào)用請(qǐng)求
觸發(fā)條件:調(diào)用Mybatis提供的API
傳?參數(shù):為SQL的ID和傳?參數(shù)對(duì)象
處理過程:將請(qǐng)求傳遞給下層的請(qǐng)求處理層進(jìn)行處理。
3、處理操作請(qǐng)求
觸發(fā)條件:API接?層傳遞請(qǐng)求過來
傳?參數(shù):為SQL的ID和傳?參數(shù)對(duì)象
處理過程:
(A)根據(jù)SQL的ID查找對(duì)應(yīng)的MappedStatement對(duì)象。
(B)根據(jù)傳?參數(shù)對(duì)象解析MappedStatement對(duì)象,得到最終要執(zhí)?的SQL和執(zhí)行傳?參數(shù)。
(C)獲取數(shù)據(jù)庫(kù)連接,根據(jù)得到的最終SQL語句和執(zhí)?傳?參數(shù)到數(shù)據(jù)庫(kù)執(zhí)?,并得到執(zhí)?結(jié)果。
(D)根據(jù)MappedStatement對(duì)象中的結(jié)果映射配置對(duì)得到的執(zhí)?結(jié)果進(jìn)行轉(zhuǎn)換處理,并得到最終的處理結(jié)果。
(E)釋放連接資源。
4、返回處理結(jié)果
將最終的處理結(jié)果返回。