MyBatis與Hibernate對比

1.使用方式

Hibernate是一個自動化更強(qiáng)、更高級的框架唆貌,在java代碼層面上抒线,省去了絕大部分sql編寫,取而代之的是用面向?qū)ο蟮姆绞讲僮麝P(guān)系型數(shù)據(jù)庫的數(shù)據(jù)夕冲。而MyBatis則是一個能夠靈活編寫sql語句氮兵,并將sql的入?yún)⒑筒樵兘Y(jié)果映射成POJOs的一個持久層框架。從表面上看歹鱼,Hibernate能方便泣栈、自動化更強(qiáng),而MyBatis 在Sql語句編寫方面則更靈活自由醉冤。

但這只是從使用層面上看兩者的區(qū)別秩霍,并未涉及的本質(zhì)。但如果看問題蚁阳,值看淺層次铃绒、表象問題的話,就不能理解技術(shù)本質(zhì)螺捐,也不能發(fā)揮技術(shù)的最多效用颠悬。所以,如果更上一個抽象層次去看定血,對于數(shù)據(jù)的操作赔癌,Hibernate是面向?qū)ο蟮模鳰yBatis是面向關(guān)系的澜沟。當(dāng)然灾票,用Hibernate也可以寫出面向關(guān)系代碼和系統(tǒng),但卻得不到面向關(guān)系的各種好處茫虽,最大的便是編寫sql的靈活性刊苍,同時也失去面向?qū)ο笠饬x和好處——一句話,不倫不類濒析。

2.面向?qū)ο蠛完P(guān)系型模型

那么正什,面向?qū)ο蠛完P(guān)系型模型有什么不同,體現(xiàn)在哪里呢号杏?實際上兩者要面對的領(lǐng)域和要解決的問題是根本不同的:面向?qū)ο笾铝τ诮鉀Q計算機(jī)邏輯問題婴氮,而關(guān)系模型致力于解決數(shù)據(jù)的高效存取問題。我們不妨對比一下面向?qū)ο蟮母拍钤瓌t和關(guān)系型數(shù)據(jù)庫的不同之處:

面向?qū)ο罂紤]的是對象的整個生命周期包括在對象的創(chuàng)建、持久化主经、狀態(tài)的改變和行為等荣暮,對象的持久化只是對象的一種狀態(tài),而面向關(guān)系型數(shù)據(jù)庫的概念則更關(guān)注數(shù)據(jù)的高效存儲和讀戎嫉 渠驼;

面向?qū)ο蟾鼜?qiáng)調(diào)對象狀態(tài)的封裝性,對象封裝自己的狀態(tài)(或數(shù)據(jù))不允許外部對象隨意修改鉴腻,只暴露一些合法的行為方法供外部對象調(diào)用迷扇;而關(guān)系型數(shù)據(jù)庫則是開放的,可以供用戶隨意讀取和修改關(guān)系爽哎,并可以和其他表任意的關(guān)聯(lián)(只要sql正確允許的情況下)蜓席;

面向?qū)ο笤噲D為動態(tài)的世界建模,他要描述的是世界的過程和規(guī)律课锌,進(jìn)而適應(yīng)發(fā)展和變化厨内,面向?qū)ο罂偸窃谧兓刑幚砀鞣N各樣的變化。而關(guān)系型模型為靜態(tài)世界建模渺贤,它通過數(shù)據(jù)快照記錄了世界在某一時候的狀態(tài)雏胃,它是靜態(tài)的。

從上面兩者基本概念和思想的對比來看志鞍,可以得出結(jié)論Hibernate和MyBatis兩個框架的側(cè)重點(diǎn)完全不同瞭亮。

3.選型及使用思路

所以我們就兩個框架選擇上,就需要根據(jù)不同的項目需求選擇不同的框架固棚。在框架的使用中统翩,也要考慮考慮框架的優(yōu)勢和劣勢,揚(yáng)長避短此洲,發(fā)揮出框架的最大效用厂汗,才能真正的提高項目研發(fā)效率、完成項目的目標(biāo)呜师。但相反娶桦,如果使用Spring Data JPA和Hibernate等ORM的框架而沒有以面向?qū)ο笏枷牒头椒ㄈシ治龊驮O(shè)計系統(tǒng),而是抱怨框架不能靈活操作sql查詢數(shù)據(jù)汁汗,那就是想讓狗去幫你拿耗子了趟紊。

使用兩個框架時候的時候,也要注意最佳的步驟和流程碰酝。下面我們來分別討論一下。

Hibernate的一般使用步驟如下:

1戴差、分析送爸、抽象和歸納出系統(tǒng)中的業(yè)務(wù)概念,并梳理出各個業(yè)務(wù)概念之間的關(guān)系——創(chuàng)建概念模型; 2袭厂、根據(jù)概念模型墨吓,進(jìn)一步細(xì)化設(shè)計系統(tǒng)中的對象類以及類的依賴關(guān)系——創(chuàng)建設(shè)計模型; 3纹磺、將設(shè)計好的類映射到數(shù)據(jù)庫的表和字段配置好帖烘; 4、Hibernate可以根據(jù)配置信息自動生成數(shù)據(jù)庫表橄杨,這個時候也可以集中精力去梳理一下表關(guān)系秘症,看看表結(jié)構(gòu)是否合理,并適當(dāng)調(diào)整一下類和表的映射關(guān)系式矫,重新生成表結(jié)構(gòu)乡摹;

完成以上步驟,基本上完成了體統(tǒng)中主要的業(yè)務(wù)概念類和表結(jié)構(gòu)的設(shè)計工作采转,只是完成表結(jié)構(gòu)設(shè)計的出發(fā)點(diǎn)事如何持久化系統(tǒng)的對象聪廉,同時兼顧數(shù)據(jù)庫表、字段故慈、字段類型板熊、表的關(guān)聯(lián)關(guān)系的合理性和合規(guī)性,而不是單純表設(shè)計察绷。這兩者思考和關(guān)注點(diǎn)還是有很大差別的干签。另外,需要說明一點(diǎn)克婶,這只是使用hibernate的最通用步驟筒严,實際操作過程中還是需要根據(jù)具體項目情況來安排。

MyBatis使用步驟:

而MyBatis對于面向?qū)ο蟮母拍顝?qiáng)調(diào)比較少情萤,更適用于靈活的對數(shù)據(jù)進(jìn)行增鸭蛙、刪、改筋岛、查娶视,所以在系統(tǒng)分析和設(shè)計過程中,要最大的發(fā)揮MyBatis的效用的話睁宰,一般使用步驟則與Hibernate有所區(qū)別:

1肪获、綜合整個系統(tǒng)分析出系統(tǒng)需要存儲的數(shù)據(jù)項目,并畫出E-R關(guān)系圖柒傻,設(shè)計表結(jié)構(gòu)孝赫; 2、根據(jù)上一步設(shè)計的表結(jié)構(gòu)红符,創(chuàng)建數(shù)據(jù)庫青柄、表伐债;

3、編寫MyBatis的SQL 映射文件致开、Pojos以及數(shù)據(jù)庫操作對應(yīng)的接口方法峰锁;

這樣看來MyBatis更適合于面向關(guān)系(或面向數(shù)據(jù)、或面向過程)的系統(tǒng)設(shè)計方法双戳,這樣的系統(tǒng)一般稱為“事務(wù)腳步”系統(tǒng)(事務(wù)腳步(Transaction Script) 出自Martin Fowler 2004年所著的企業(yè)應(yīng)用架構(gòu)模式(Patterns of Enterprise Application Architecture))虹蒋。而hibernate(也可以說Spring Data JPA)更適合于構(gòu)建領(lǐng)域模型類的系統(tǒng)。當(dāng)然飒货,我們也不能說MyBatis無法構(gòu)建領(lǐng)域模型驅(qū)動的系統(tǒng)魄衅,而hibernate無法構(gòu)建事務(wù)腳步系統(tǒng)。只是用MyBatis構(gòu)建領(lǐng)域模型要做更多膏斤、跟臟徐绑、更累的工作;而用hibernate構(gòu)建一個事務(wù)腳本系統(tǒng)有些大材小用莫辨,數(shù)據(jù)的查詢反而沒那么靈活傲茄。

綜合上面所有描述和對比,我們對這兩個框架的本質(zhì)區(qū)別應(yīng)該有所了解了沮榜。我們了解了這些區(qū)別盘榨,可以幫助我們選擇更合適的框架,同時蟆融,也可以利用不同的框架草巡,讓他們?nèi)プ龈线m事,這也是所謂的物盡其用吧型酥,更不至于我們“為物所役”

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末山憨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子弥喉,更是在濱河造成了極大的恐慌郁竟,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件由境,死亡現(xiàn)場離奇詭異棚亩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)虏杰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門讥蟆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纺阔,你說我怎么就攤上這事瘸彤。” “怎么了笛钝?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵钧栖,是天一觀的道長低零。 經(jīng)常有香客問我,道長拯杠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任啃奴,我火速辦了婚禮潭陪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘最蕾。我一直安慰自己依溯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布瘟则。 她就那樣靜靜地躺著,像睡著了一般醋拧。 火紅的嫁衣襯著肌膚如雪慷嗜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天丹壕,我揣著相機(jī)與錄音庆械,去河邊找鬼。 笑死菌赖,一個胖子當(dāng)著我的面吹牛缭乘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播琉用,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼堕绩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了邑时?” 一聲冷哼從身側(cè)響起奴紧,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎刁愿,沒想到半個月后绰寞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铣口,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年滤钱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脑题。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡件缸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出叔遂,到底是詐尸還是另有隱情他炊,我是刑警寧澤争剿,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站痊末,受9級特大地震影響蚕苇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凿叠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一涩笤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盒件,春花似錦蹬碧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至翔始,卻和暖如春罗心,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绽昏。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工协屡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人全谤。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓肤晓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親认然。 傳聞我的和親對象是個殘疾皇子补憾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345