MyBatis架構(gòu)設(shè)計

框架架構(gòu)

框架架構(gòu)
  1. 加載配置:配置來源于兩個地方无宿,一處是配置文件茵汰,一處是Java代碼的注解,將SQL的配置信息加載成為一個個MappedStatement對象(包括了傳入?yún)?shù)映射配置孽鸡、執(zhí)行的SQL語句蹂午、結(jié)果映射配置),存儲在內(nèi)存中彬碱。
    Mybatis和數(shù)據(jù)庫交互的兩種方式:(1)傳統(tǒng)的MyBatis提供的API(2)使用Mapper接口

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

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

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

功能架構(gòu)

功能架構(gòu)
  1. API接口層:提供給外部使用的接口API燥透,開發(fā)人員通過這些本地API來操縱數(shù)據(jù)庫沙咏。接口層一接收到調(diào)用請求就會調(diào)用數(shù)據(jù)處理層來完成具體的數(shù)據(jù)處理。

  2. 數(shù)據(jù)處理層:負(fù)責(zé)具體的SQL查找班套、SQL解析肢藐、SQL執(zhí)行和執(zhí)行結(jié)果映射處理等。它主要的目的是根據(jù)調(diào)用的請求完成一次數(shù)據(jù)庫操作吱韭。

  3. 基礎(chǔ)支撐層:負(fù)責(zé)最基礎(chǔ)的功能支撐吆豹,包括連接管理、事務(wù)管理理盆、配置加載和緩存處理痘煤,這些都是共用的東西,將他們抽取出來作為最基礎(chǔ)的組件猿规。為上層的數(shù)據(jù)處理層提供最基礎(chǔ)的支撐衷快。

Mybatis主要構(gòu)件及其相互關(guān)系

  1. SqlSession 作為MyBatis工作的主要頂層API,表示和數(shù)據(jù)庫交互的會話姨俩,完成必要數(shù)據(jù)庫增刪改查功能

  2. Executor MyBatis執(zhí)行器蘸拔,是MyBatis 調(diào)度的核心,負(fù)責(zé)SQL語句的生成和查詢緩存的維護(hù)

  3. StatementHandler 封裝了JDBC Statement操作环葵,負(fù)責(zé)對JDBC statement的操作调窍,如設(shè)置參數(shù)、將Statement結(jié)果集轉(zhuǎn)換成List集合张遭。

  4. ParameterHandler 負(fù)責(zé)對用戶傳遞的參數(shù)轉(zhuǎn)換成JDBC Statement 所需要的參數(shù)

  5. ResultSetHandler 負(fù)責(zé)將JDBC返回的ResultSet結(jié)果集對象轉(zhuǎn)換成List類型的集合

  6. TypeHandler 負(fù)責(zé)java數(shù)據(jù)類型和jdbc數(shù)據(jù)類型之間的映射和轉(zhuǎn)換

  7. MappedStatement MappedStatement維護(hù)了一條<select|update|delete|insert>節(jié)點(diǎn)的封裝

  8. SqlSource 負(fù)責(zé)根據(jù)用戶傳遞的parameterObject邓萨,動態(tài)地生成SQL語句,將信息封裝到BoundSql對象中菊卷,并返回

  9. BoundSql 表示動態(tài)生成的SQL語句以及相應(yīng)的參數(shù)信息

  10. Configuration MyBatis所有的配置信息都維持在Configuration對象之中

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缔恳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子的烁,更是在濱河造成了極大的恐慌褐耳,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渴庆,死亡現(xiàn)場離奇詭異铃芦,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)襟雷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門刃滓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人耸弄,你說我怎么就攤上這事咧虎。” “怎么了计呈?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵砰诵,是天一觀的道長征唬。 經(jīng)常有香客問我,道長茁彭,這世上最難降的妖魔是什么总寒? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮理肺,結(jié)果婚禮上摄闸,老公的妹妹穿的比我還像新娘。我一直安慰自己妹萨,他們只是感情好年枕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乎完,像睡著了一般熏兄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上囱怕,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天霍弹,我揣著相機(jī)與錄音,去河邊找鬼娃弓。 笑死,一個胖子當(dāng)著我的面吹牛岛宦,可吹牛的內(nèi)容都是我干的台丛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼砾肺,長吁一口氣:“原來是場噩夢啊……” “哼挽霉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起变汪,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤侠坎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后裙盾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體实胸,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年番官,在試婚紗的時候發(fā)現(xiàn)自己被綠了庐完。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡徘熔,死狀恐怖门躯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情酷师,我是刑警寧澤讶凉,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布染乌,位于F島的核電站,受9級特大地震影響懂讯,放射性物質(zhì)發(fā)生泄漏慕匠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一域醇、第九天 我趴在偏房一處隱蔽的房頂上張望台谊。 院中可真熱鬧,春花似錦譬挚、人聲如沸锅铅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盐须。三九已至,卻和暖如春漆腌,著一層夾襖步出監(jiān)牢的瞬間贼邓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工闷尿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留塑径,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓填具,卻偏偏與公主長得像统舀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子劳景,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容