Mybatis面向接口編程實踐與mapper代理對象生成

上篇提到面向接口編程需要使用getMapper獲取代理對象辛臊,今天我們來看一下mapper代理對象是如何產生的哪怔,在此之前先回憶下面試接口編程典格。

一祖娘、Mybatis面向接口編程實踐

(一)使用xml的方式

1.定義mapper接口

Mapper接口就是一個普通的接口丽焊。

[圖片上傳失敗...(image-f682a9-1542177065563)]

2.定義****mapper映射文件

[圖片上傳失敗...(image-7f393e-1542177065563)]

3.在全局配置文件中配置mapper映射文件

上篇我們也說過掷倔,雖有多種方式觸發(fā)文件解析與接口注入眉孩,不做此步驟也能完成(搞清楚一個前提我們現(xiàn)在說的都是在mybatis面向接口編程方式下),但是我們建議通過配置映射文件的方式觸發(fā)mybatis自動掃描注入勒葱。配置方式有多種浪汪,不在贅述。我們的配置方式如下:

[圖片上傳失敗...(image-994100-1542177065563)]

4.現(xiàn)在我們測試一下

[圖片上傳失敗...(image-459231-1542177065563)]

測試結果ok凛虽。

(二)使用注解的方式死遭。

1.定義mapper接口,同時使用注解

[圖片上傳失敗...(image-70796f-1542177065563)]

2.接口注入凯旋。

上篇我們也提到過呀潭,雖然用注解不需要xml映射文件,但我們可以通過配置一個只含有namespace的映射文件觸發(fā)接口注入至非。如下:

[圖片上傳失敗...(image-cb2a30-1542177065563)]

假如我們就是配置钠署,可以在使用之前調用

sqlsession.getConfiguration().addMapper(IUser.class);

3.測試,假設沒有配置xml

[圖片上傳失敗...(image-e96573-1542177065563)]

測試ok.

二睡蟋、Mybatis面向接口編程之mapper對象的產生

[圖片上傳失敗...(image-d97754-1542177065562)]

[圖片上傳失敗...(image-cbb021-1542177065562)]

[圖片上傳失敗...(image-2ff428-1542177065562)]

mapperRegistry中getMapper踏幻,首先通過Class類型在knowMappers中獲取mapperProxyFactory.這個變量就是個hashMap,是所有注冊的mapper接口,上篇我們提到過戳杀。方法直接返mapperProxyFactory.newInstance(sqlSession).我們接著看下

[圖片上傳失敗...(image-201955-1542177065562)]

由此可以看出mybatis直接使用了jdk的動態(tài)代理產生了一個mapper接口代理對象该面。

我 們下面看一下MapperProxy,的invoke方法信卡,MapperProxy是個InvocationHandler

[圖片上傳失敗...(image-40c7b4-1542177065562)]

如果是object中的方法直接調用隔缀,比如hashCode,wait.toString..這些,我們接口中并沒有default方法傍菇。最終會調用最后兩行猾瘸。

接著看下MapperMethod對象的產生

[圖片上傳失敗...(image-d07275-1542177065562)]

他有一個緩存避免了每次都重新生成一個對象,因為這個對象的創(chuàng)建過程比較復雜丢习。

構造方法如下:

[圖片上傳失敗...(image-13faaa-1542177065562)]

SqlCommand和MethodSignature為兩個內部類牵触,先看一下SqlCommand

[圖片上傳失敗...(image-e275e2-1542177065562)]

里面如下方法是去全局配置對象查找解析的sql語句生成的類對象,id為接口全類名+方法名,for循環(huán)為遞歸調用咐低,因為接口存在繼承關系揽思,方法不一定都聲明在本類,也可能在父類见擦,父類的父類钉汗。羹令。。损痰。福侈。。卢未。肪凛。

[圖片上傳失敗...(image-4abb5b-1542177065562)]

Come on

[圖片上傳失敗...(image-d4fb92-1542177065562)]

通過剛才的satementId取判斷Configuration中成員對象mappedStatement中是否包含[圖片上傳失敗...(image-8ae882-1542177065562)]

這個對象便是所有解析的sql語句生成的類對象的map集合,為內部類尝丐,繼承了hashMap,显拜,重寫了put,get方法。key即為namespace+語句id和語句id,兩個key對應相同對象爹袁,這也是什么用mybatis的時候远荠,語句可以不寫namespace的原因。具體解析以后再分析失息。

判斷如果存在對應的sql語句譬淳,則取到相應的MappedStatement對象,這個對象包含了映射文件中定義的語句(如select)的所有信息盹兢,比如參數(shù)邻梆,返回值,具體sql,類型(增刪蓋查)绎秒。浦妄。。等等等

內部類MethodSignature定義了接口中方法的各種信息见芹。

[圖片上傳失敗...(image-97b844-1542177065562)]

至此MapperMethod對象完成創(chuàng)建剂娄。接下來調用execute方法。

[圖片上傳失敗...(image-e84502-1542177065562)]

該方法中根據語句類型玄呛,回歸原始直接調用了sqlSession中的增刪蓋查方法阅懦,根據配置和方法信息拼裝返回結果。到此一個實現(xiàn)了mapper接口的代理對象生成完成徘铝,所以你可以盡情的使用此對象調用方法啦耳胎。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市惕它,隨后出現(xiàn)的幾起案子怕午,更是在濱河造成了極大的恐慌,老刑警劉巖淹魄,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件郁惜,死亡現(xiàn)場離奇詭異,居然都是意外死亡揭北,警方通過查閱死者的電腦和手機扳炬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搔体,“玉大人恨樟,你說我怎么就攤上這事【尉悖” “怎么了劝术?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長呆奕。 經常有香客問我养晋,道長,這世上最難降的妖魔是什么梁钾? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任绳泉,我火速辦了婚禮,結果婚禮上姆泻,老公的妹妹穿的比我還像新娘零酪。我一直安慰自己,他們只是感情好拇勃,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布四苇。 她就那樣靜靜地躺著,像睡著了一般方咆。 火紅的嫁衣襯著肌膚如雪月腋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天瓣赂,我揣著相機與錄音榆骚,去河邊找鬼。 笑死钩述,一個胖子當著我的面吹牛寨躁,可吹牛的內容都是我干的。 我是一名探鬼主播牙勘,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼职恳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了方面?” 一聲冷哼從身側響起放钦,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎恭金,沒想到半個月后操禀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡横腿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年颓屑,在試婚紗的時候發(fā)現(xiàn)自己被綠了斤寂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡揪惦,死狀恐怖遍搞,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情器腋,我是刑警寧澤溪猿,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站纫塌,受9級特大地震影響诊县,放射性物質發(fā)生泄漏。R本人自食惡果不足惜措左,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一依痊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧怎披,春花似錦抗悍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鱼炒,卻和暖如春衔沼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背昔瞧。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工指蚁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人自晰。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓凝化,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酬荞。 傳聞我的和親對象是個殘疾皇子搓劫,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內容