MyBatis體系結構與工作原理

MyBatis的工作流程

首先在MyBatis啟動的時候我們需要去解析配置文件,包括全局配置文件(Mybatis-config.xml)以及映射器配置文件, 這里面包含了我們怎么控制MyBatis的行為和我們要對數據庫下達的指令,也就是我們的SQL的信息晕讲,我們會把這些信息解析成一個Configuration對象子巾。

接下來就是我們操作數據庫的接口锰什,它在應用程序和數據庫中間罚随,代表我們和數據庫之間的一次連接玉工,這個就是SqlSession對象。

我們要獲得一個會話淘菩,必須有一個會話工廠SqlSessionFactory遵班,SqlSessionFactory中又必須包含我們所有的配置信息,所以MyBatis通過一個builder來創(chuàng)建SqlSessionFactory潮改。

我們知道MyBatis是對JDBC的封裝狭郑,也就意味著底層一定會出現JDBC的一些核心對象,比如執(zhí)行SQL的Statement汇在,結果集ResultSet翰萨。在MyBatis里面,SqlSession只是提供給應用的一個接口糕殉,還不是SQL的真正執(zhí)行對象亩鬼。

通過代碼中可以看到,SqlSession中持有一個Executor對象阿蝶,用來封裝對數據庫的操作雳锋。在執(zhí)行器Executor執(zhí)行query或者update操作的時候,我們會創(chuàng)建一系列的對象來處理參數羡洁,執(zhí)行SQL玷过,處理結果集。我們可以簡化成一個StatementHandler對象筑煮,下面是MyBatis的主要流程圖:

在這里插入圖片描述

在MyBatis的主要工作流程里面辛蚊,不同的功能是由很多不同的類協(xié)作完成的,它們分布在MyBatis Jar的不同的packagel里面真仲。
在這里插入圖片描述

和Spring一樣袋马,MyBatis按照功能職責的不同,所有的package可以分成不同的工作層次:
在這里插入圖片描述

接口層: 接口層是我們打交道最多的袒餐,核心對象是SqlSession飞蛹,它是上層應用和MyBatis打交道的橋梁谤狡,SqlSession上定義了很多對數據庫操作的方法,接口層在接收到調用請求的時候卧檐,會調用核心處理層的相應模塊來完成具體的數據庫操作墓懂。
核心處理層: 跟數據庫操作相關的動作都是在這一層完成的。核心處理層主要做了下面幾件事:

  1. 把接口中傳入的參數解析并映射成JDBC類型
  2. 解析xml文件中的SQL語句霉囚,包括插入參數和動態(tài)SQL的生成
  3. 執(zhí)行SQL語句
  4. 處理結果集捕仔,并映射成Java對象
    插件也屬于核心處理層,這是由它的工作方式和攔截的對象決定的盈罐。
    基礎支持層:主要是由一些抽取出來的通用功能榜跌,用來支持核心處理層的功能。b比如數據源盅粪、緩存钓葫、日志等這些功能。
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末票顾,一起剝皮案震驚了整個濱河市础浮,隨后出現的幾起案子,更是在濱河造成了極大的恐慌奠骄,老刑警劉巖豆同,帶你破解...
    沈念sama閱讀 212,332評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異含鳞,居然都是意外死亡影锈,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,508評論 3 385
  • 文/潘曉璐 我一進店門蝉绷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸭廷,“玉大人,你說我怎么就攤上這事潜必⊙プ耍” “怎么了?”我有些...
    開封第一講書人閱讀 157,812評論 0 348
  • 文/不壞的土叔 我叫張陵磁滚,是天一觀的道長佛吓。 經常有香客問我,道長垂攘,這世上最難降的妖魔是什么维雇? 我笑而不...
    開封第一講書人閱讀 56,607評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮晒他,結果婚禮上吱型,老公的妹妹穿的比我還像新娘。我一直安慰自己陨仅,他們只是感情好津滞,可當我...
    茶點故事閱讀 65,728評論 6 386
  • 文/花漫 我一把揭開白布铝侵。 她就那樣靜靜地躺著,像睡著了一般触徐。 火紅的嫁衣襯著肌膚如雪咪鲜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,919評論 1 290
  • 那天撞鹉,我揣著相機與錄音疟丙,去河邊找鬼。 笑死鸟雏,一個胖子當著我的面吹牛享郊,可吹牛的內容都是我干的。 我是一名探鬼主播孝鹊,決...
    沈念sama閱讀 39,071評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼炊琉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了惶室?” 一聲冷哼從身側響起温自,我...
    開封第一講書人閱讀 37,802評論 0 268
  • 序言:老撾萬榮一對情侶失蹤玄货,失蹤者是張志新(化名)和其女友劉穎皇钞,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體松捉,經...
    沈念sama閱讀 44,256評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡夹界,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,576評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了隘世。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片可柿。...
    茶點故事閱讀 38,712評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖丙者,靈堂內的尸體忽然破棺而出复斥,到底是詐尸還是另有隱情,我是刑警寧澤械媒,帶...
    沈念sama閱讀 34,389評論 4 332
  • 正文 年R本政府宣布目锭,位于F島的核電站,受9級特大地震影響纷捞,放射性物質發(fā)生泄漏痢虹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,032評論 3 316
  • 文/蒙蒙 一主儡、第九天 我趴在偏房一處隱蔽的房頂上張望奖唯。 院中可真熱鬧,春花似錦糜值、人聲如沸丰捷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽病往。三九已至畅蹂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間荣恐,已是汗流浹背液斜。 一陣腳步聲響...
    開封第一講書人閱讀 32,026評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留叠穆,地道東北人少漆。 一個月前我還...
    沈念sama閱讀 46,473評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像硼被,于是被迫代替她去往敵國和親示损。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,606評論 2 350