我的家園

          我的家園

          ?

          1.引言

          本文主要講解Mybatis的整體程序設(shè)計(jì),理清楚框架的主要脈絡(luò)。后面文章我們?cè)僭敿?xì)講解各個(gè)組件。

          ?

          2.整體設(shè)計(jì)

          2.1 總體流程

          (1)加載配置并初始化

          ? ? ? 觸發(fā)條件:加載配置文件

          ? ? ? 配置來(lái)源于兩個(gè)地方,一處是配置文件,一處是Java代碼的注解,將SQL的配置信息加載成為一個(gè)個(gè)MappedStatement對(duì)象(包括了傳入?yún)?shù)映射配置、執(zhí)行的SQL語(yǔ)句、結(jié)果映射配置),存儲(chǔ)在內(nèi)存中。

          ??????

          (2)接收調(diào)用請(qǐng)求

          ? ? ? 觸發(fā)條件:調(diào)用Mybatis提供的API

          ? ? ? 傳入?yún)?shù):為SQLID和傳入?yún)?shù)對(duì)象

          ? ? ? 處理過(guò)程:將請(qǐng)求傳遞給下層的請(qǐng)求處理層進(jìn)行處理。

          ??????????

          (3)處理操作請(qǐng)求

          ?????? 觸發(fā)條件:API接口層傳遞請(qǐng)求過(guò)來(lái)

          ?????? 傳入?yún)?shù):為SQLID和傳入?yún)?shù)對(duì)象

          ?????? 處理過(guò)程:

          ? ? ? ? (A)根據(jù)SQLID查找對(duì)應(yīng)的MappedStatement對(duì)象。

          ? ? ? ? (B)根據(jù)傳入?yún)?shù)對(duì)象解析MappedStatement對(duì)象,得到最終要執(zhí)行的SQL和執(zhí)行傳入?yún)?shù)。

          ? ? ? ? (C)獲取數(shù)據(jù)庫(kù)連接,根據(jù)得到的最終SQL語(yǔ)句和執(zhí)行傳入?yún)?shù)到數(shù)據(jù)庫(kù)執(zhí)行,并得到執(zhí)行結(jié)果。

          ? ? ? ? (D)根據(jù)MappedStatement對(duì)象中的結(jié)果映射配置對(duì)得到的執(zhí)行結(jié)果進(jìn)行轉(zhuǎn)換處理,并得到最終的處理結(jié)果。

          ? ? ? ? (E)釋放連接資源。

          ???????

          (4)返回處理結(jié)果

          將最終的處理結(jié)果返回。

          ?

          2.2?功能架構(gòu)設(shè)計(jì)

          功能架構(gòu)講解:

          我們把Mybatis的功能架構(gòu)分為三層:

          (1)API接口層:提供給外部使用的接口API,開發(fā)人員通過(guò)這些本地API來(lái)操縱數(shù)據(jù)庫(kù)。接口層一接收到調(diào)用請(qǐng)求就會(huì)調(diào)用數(shù)據(jù)處理層來(lái)完成具體的數(shù)據(jù)處理。

          (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ù)管理、配置加載和緩存處理,這些都是共用的東西,將他們抽取出來(lái)作為最基礎(chǔ)的組件。為上層的數(shù)據(jù)處理層提供最基礎(chǔ)的支撐。

          ?

          2.3?框架架構(gòu)設(shè)計(jì)


          ?

          框架架構(gòu)講解:

          (1)加載配置:配置來(lái)源于兩個(gè)地方,一處是配置文件,一處是Java代碼的注解,將SQL的配置信息加載成為一個(gè)個(gè)MappedStatement對(duì)象(包括了傳入?yún)?shù)映射配置、執(zhí)行的SQL語(yǔ)句、結(jié)果映射配置),存儲(chǔ)在內(nèi)存中。

          (2)SQL解析:當(dāng)API接口層接收到調(diào)用請(qǐng)求時(shí),會(huì)接收到傳入SQLID和傳入對(duì)象(可以是Map、JavaBean或者基本數(shù)據(jù)類型),Mybatis會(huì)根據(jù)SQLID找到對(duì)應(yīng)的MappedStatement,然后根據(jù)傳入?yún)?shù)對(duì)象對(duì)MappedStatement進(jìn)行解析,解析后可以得到最終要執(zhí)行的SQL語(yǔ)句和參數(shù)。

          (3)?SQL執(zhí)行:將最終得到的SQL和參數(shù)拿到數(shù)據(jù)庫(kù)進(jìn)行執(zhí)行,得到操作數(shù)據(jù)庫(kù)的結(jié)果。

          (4)結(jié)果映射:將操作數(shù)據(jù)庫(kù)的結(jié)果按照映射的配置進(jìn)行轉(zhuǎn)換,可以轉(zhuǎn)換成HashMap、JavaBean或者基本數(shù)據(jù)類型,并將最終結(jié)果返回。






          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 蒙自县| 虹口区| 惠来县| 秦皇岛市| 彩票| 潮安县| 泰安市| 德格县| 呼图壁县| 华阴市| 阳城县| 克什克腾旗| 永清县| 新昌县| 运城市| 万荣县| 天镇县| 环江| 江北区| 乐业县| 潜江市| 张家港市| 古田县| 石家庄市| 富宁县| 黑河市| 平昌县| 涡阳县| 张家川| 来宾市| 东光县| 于都县| 基隆市| 牡丹江市| 贡嘎县| 定兴县| 兴安盟| 济阳县| 正阳县| 炎陵县| 临邑县|