淺析Mybatis與Hibernate的區(qū)別與用途

有很長一段時間對mybatis是比較陌生的患膛,只知道與Hibernate一樣是個orm數(shù)據(jù)庫框架拳亿。隨著使用熟練度的增加嚎朽,發(fā)現(xiàn)它與Hibernate區(qū)別是非常大的位他,應當結(jié)合不同的情況分析選用吧黄。結(jié)合至今為止的經(jīng)驗部服,總結(jié)出以下幾點:

1. hibernate是全自動,而mybatis是半自動

hibernate完全可以通過對象關系模型實現(xiàn)對數(shù)據(jù)庫的操作拗慨,擁有完整的JavaBean對象與數(shù)據(jù)庫的映射結(jié)構(gòu)來自動生成sql廓八。而mybatis僅有基本的字段映射,對象數(shù)據(jù)以及對象實際關系仍然需要通過手寫sql來實現(xiàn)和管理赵抢。

2. hibernate數(shù)據(jù)庫移植性遠大于mybatis

hibernate通過它強大的映射結(jié)構(gòu)和hql語言剧蹂,大大降低了對象與數(shù)據(jù)庫(oracle、mysql等)的耦合性烦却,而mybatis由于需要手寫sql宠叼,因此與數(shù)據(jù)庫的耦合性直接取決于程序員寫sql的方法,如果sql不具通用性而用了很多某數(shù)據(jù)庫特性的sql語句的話,移植性也會隨之降低很多冒冬,成本很高伸蚯。

3. hibernate擁有完整的日志系統(tǒng),mybatis則欠缺一些

hibernate日志系統(tǒng)非常健全简烤,涉及廣泛剂邮,包括:sql記錄、關系異常横侦、優(yōu)化警告挥萌、緩存提示、臟數(shù)據(jù)警告等丈咐;而mybatis則除了基本記錄功能外瑞眼,功能薄弱很多。

4. mybatis相比hibernate需要關心很多細節(jié)

hibernate配置要比mybatis復雜的多棵逊,學習成本也比mybatis高。但也正因為mybatis使用簡單银酗,才導致它要比hibernate關心很多技術細節(jié)辆影。mybatis由于不用考慮很多細節(jié),開發(fā)模式上與傳統(tǒng)jdbc區(qū)別很小黍特,因此很容易上手并開發(fā)項目蛙讥,但忽略細節(jié)會導致項目前期bug較多,因而開發(fā)出相對穩(wěn)定的軟件很慢灭衷,而開發(fā)出軟件卻很快次慢。hibernate則正好與之相反。但是如果使用hibernate很熟練的話翔曲,實際上開發(fā)效率絲毫不差于甚至超越mybatis迫像。

5. sql直接優(yōu)化上,mybatis要比hibernate方便很多

由于mybatis的sql都是寫在xml里瞳遍,因此優(yōu)化sql比hibernate方便很多闻妓。而hibernate的sql很多都是自動生成的,無法直接維護sql掠械;雖有hql由缆,但功能還是不及sql強大,見到報表等變態(tài)需求時猾蒂,hql也歇菜均唉,也就是說hql是有局限的;hibernate雖然也支持原生sql肚菠,但開發(fā)模式上卻與orm不同舔箭,需要轉(zhuǎn)換思維,因此使用上不是非常方便案糙∠尴樱總之寫sql的靈活度上hibernate不及mybatis靴庆。

隨著使用情況的不斷增多,我又做了進一步的總結(jié)總結(jié):

mybatis:小巧怒医、方便炉抒、高效、簡單稚叹、直接焰薄、半自動

hibernate:強大、方便扒袖、高效塞茅、復雜、繞彎子季率、全自動

mybatis:

1. 入門簡單野瘦,即學即用,提供了數(shù)據(jù)庫查詢的自動對象綁定功能飒泻,而且延續(xù)了很好的SQL使用經(jīng)驗鞭光,對于沒有那么高的對象模型要求的項目來說,相當完美泞遗。

2. 可以進行更為細致的SQL優(yōu)化惰许,可以減少查詢字段。

3. 缺點就是框架還是比較簡陋史辙,功能尚有缺失汹买,雖然簡化了數(shù)據(jù)綁定代碼,但是整個底層數(shù)據(jù)庫查詢實際還是要自己寫的聊倔,工作量也比較大晦毙,而且不太容易適應快速數(shù)據(jù)庫修改。

4. 二級緩存機制不佳方库。

hibernate:

1. 功能強大结序,數(shù)據(jù)庫無關性好,O/R映射能力強纵潦,如果你對Hibernate相當精通徐鹤,而且對Hibernate進行了適當?shù)姆庋b,那么你的項目整個持久層代碼會相當簡單邀层,需要寫的代碼很少返敬,開發(fā)速度很快,非常爽寥院。

2. 有更好的二級緩存機制劲赠,可以使用第三方緩存。

3. 缺點就是學習門檻不低,要精通門檻更高凛澎,而且怎么設計O/R映射霹肝,在性能和對象模型之間如何權(quán)衡取得平衡,以及怎樣用好Hibernate方面需要你的經(jīng)驗和能力都很強才行塑煎。

舉個形象的比喻:

mybatis:機械工具沫换,使用方便,拿來就用最铁,但工作還是要自己來作讯赏,不過工具是活的,怎么使由我決定冷尉。

hibernate:智能機器人漱挎,但研發(fā)它(學習、熟練度)的成本很高雀哨,工作都可以擺脫他了磕谅,但僅限于它能做的事。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雾棺,一起剝皮案震驚了整個濱河市怜庸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌垢村,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嚎卫,死亡現(xiàn)場離奇詭異嘉栓,居然都是意外死亡,警方通過查閱死者的電腦和手機拓诸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門侵佃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人奠支,你說我怎么就攤上這事馋辈。” “怎么了倍谜?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵迈螟,是天一觀的道長。 經(jīng)常有香客問我尔崔,道長答毫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任季春,我火速辦了婚禮洗搂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己耘拇,他們只是感情好撵颊,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著惫叛,像睡著了一般倡勇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挣棕,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天译隘,我揣著相機與錄音,去河邊找鬼洛心。 笑死固耘,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的词身。 我是一名探鬼主播厅目,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼法严!你這毒婦竟也來了损敷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤深啤,失蹤者是張志新(化名)和其女友劉穎拗馒,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溯街,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡诱桂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了呈昔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挥等。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖堤尾,靈堂內(nèi)的尸體忽然破棺而出肝劲,到底是詐尸還是另有隱情,我是刑警寧澤郭宝,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布辞槐,位于F島的核電站,受9級特大地震影響剩蟀,放射性物質(zhì)發(fā)生泄漏催蝗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一育特、第九天 我趴在偏房一處隱蔽的房頂上張望丙号。 院中可真熱鬧先朦,春花似錦、人聲如沸犬缨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怀薛。三九已至刺彩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間枝恋,已是汗流浹背创倔。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留焚碌,地道東北人畦攘。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像十电,于是被迫代替她去往敵國和親知押。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

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