MyBatis和Hibernate相比碟渺,優(yōu)勢在哪里?

1突诬、開發(fā)對比開發(fā)速度

hibernate的真正掌握要比Mybatis來得難些苫拍。Mybatis框架相對簡單很容易上手芜繁,但也相對簡陋些。個人覺得要用好Mybatis還是首先要先理解好Hibernate绒极。

開發(fā)社區(qū)

Hibernate 與Mybatis都是流行的持久層開發(fā)框架骏令,但Hibernate開發(fā)社區(qū)相對多熱鬧些,支持的工具也多垄提,更新也快榔袋,當(dāng)前最高版本4.1.8。而Mybatis相對平靜铡俐,工具較少凰兑,當(dāng)前最高版本3.2。

開發(fā)工作量

Hibernate和MyBatis都有相應(yīng)的代碼生成工具审丘±艄唬可以生成簡單基本的DAO層方法。

針對高級查詢滩报,Mybatis需要手動編寫SQL語句锅知,以及ResultMap。而Hibernate有良好的映射機制脓钾,開發(fā)者無需關(guān)心SQL的生成與結(jié)果映射售睹,可以更專注于業(yè)務(wù)流程。

2惭笑、系統(tǒng)調(diào)優(yōu)對比Hibernate的調(diào)優(yōu)方案

制定合理的緩存策略侣姆;

盡量使用延遲加載特性;

采用合理的Session管理機制沉噩;

使用批量抓取捺宗,設(shè)定合理的批處理參數(shù)(batch_size);

進行合理的O/R映射設(shè)計

Mybatis調(diào)優(yōu)方案

MyBatis在Session方面和Hibernate的Session生命周期是一致的,同樣需要合理的Session管理機制川蒙。MyBatis同樣具有二級緩存機制蚜厉。 MyBatis可以進行詳細的SQL優(yōu)化設(shè)計。

SQL優(yōu)化方面

Hibernate的查詢會將表中的所有字段查詢出來畜眨,這一點會有性能消耗昼牛。Hibernate也可以自己寫SQL來指定需要查詢的字段,但這樣就破壞了Hibernate開發(fā)的簡潔性康聂。而Mybatis的SQL是手動編寫的贰健,所以可以按需求指定查詢的字段。

Hibernate HQL語句的調(diào)優(yōu)需要將SQL打印出來恬汁,而Hibernate的SQL被很多人嫌棄因為太丑了伶椿。MyBatis的SQL是自己手動寫的所以調(diào)整方便。但Hibernate具有自己的日志統(tǒng)計。Mybatis本身不帶日志統(tǒng)計脊另,使用Log4j進行日志記錄导狡。

擴展性方面

Hibernate與具體數(shù)據(jù)庫的關(guān)聯(lián)只需在XML文件中配置即可,所有的HQL語句與具體使用的數(shù)據(jù)庫無關(guān)偎痛,移植性很好旱捧。MyBatis項目中所有的SQL語句都是依賴所用的數(shù)據(jù)庫的,所以不同數(shù)據(jù)庫類型的支持不好踩麦。

3枚赡、對象管理與抓取策略對象管理

Hibernate 是完整的對象/關(guān)系映射解決方案,它提供了對象狀態(tài)管理(state management)的功能靖榕,使開發(fā)者不再需要理會底層數(shù)據(jù)庫系統(tǒng)的細節(jié)标锄。也就是說,相對于常見的 JDBC/SQL 持久層方案中需要管理 SQL 語句茁计,Hibernate采用了更自然的面向?qū)ο蟮囊暯莵沓志没?a target="_blank" rel="nofollow">Java應(yīng)用中的數(shù)據(jù)。

換句話說谓松,使用 Hibernate 的開發(fā)者應(yīng)該總是關(guān)注對象的狀態(tài)(state)星压,不必考慮 SQL 語句的執(zhí)行。這部分細節(jié)已經(jīng)由 Hibernate 掌管妥當(dāng)鬼譬,只有開發(fā)者在進行系統(tǒng)性能調(diào)優(yōu)的時候才需要進行了解娜膘。

而MyBatis在這一塊沒有文檔說明,用戶需要對對象自己進行詳細的管理优质。

抓取策略

Hibernate對實體關(guān)聯(lián)對象的抓取有著良好的機制竣贪。對于每一個關(guān)聯(lián)關(guān)系都可以詳細地設(shè)置是否延遲加載,并且提供關(guān)聯(lián)抓取巩螃、查詢抓取演怎、子查詢抓取、批量抓取四種模式避乏。 它是詳細配置和處理的爷耀。

而Mybatis的延遲加載是全局配置的。

4拍皮、緩存機制對比Hibernate緩存

Hibernate一級緩存是Session緩存歹叮,利用好一級緩存就需要對Session的生命周期進行管理好。建議在一個Action操作中使用一個Session铆帽。一級緩存需要對Session進行嚴格管理咆耿。

Hibernate二級緩存是SessionFactory級的緩存。 SessionFactory的緩存分為內(nèi)置緩存和外置緩存爹橱。內(nèi)置緩存中存放的是SessionFactory對象的一些集合屬性包含的數(shù)據(jù)(映射元素據(jù)及預(yù)定SQL語句等),對于應(yīng)用程序來說,它是只讀的萨螺。外置緩存中存放的是數(shù)據(jù)庫數(shù)據(jù)的副本,其作用和一級緩存類似.二級緩存除了以內(nèi)存作為存儲介質(zhì)外,還可以選用硬盤等外部存儲設(shè)備。二級緩存稱為進程級緩存或SessionFactory級緩存,它可以被所有session共享屑迂,它的生命周期伴隨著SessionFactory的生命周期存在和消亡浸策。

5、優(yōu)勢對比

Mybatis優(yōu)勢

MyBatis可以進行更為細致的SQL優(yōu)化惹盼,可以減少查詢字段庸汗。

MyBatis容易掌握,而Hibernate門檻較高手报。

Hibernate優(yōu)勢

Hibernate的DAO層開發(fā)比MyBatis簡單蚯舱,Mybatis需要維護SQL和結(jié)果映射。

Hibernate對對象的維護和緩存要比MyBatis好掩蛤,對增刪改查的對象的維護要方便枉昏。

Hibernate數(shù)據(jù)庫移植性很好,MyBatis的數(shù)據(jù)庫移植性不好揍鸟,不同的數(shù)據(jù)庫需要寫不同SQL兄裂。

Hibernate有更好的二級緩存機制,可以使用第三方緩存阳藻。MyBatis本身提供的緩存機制不佳晰奖。

更多詳細源碼參考來源:http://minglisoft.cn/technology歡迎大家一起學(xué)習(xí)研究相關(guān)技術(shù),源碼獲取請加求求:2042849237

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末腥泥,一起剝皮案震驚了整個濱河市匾南,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蛔外,老刑警劉巖蛆楞,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異夹厌,居然都是意外死亡豹爹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門尊流,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帅戒,“玉大人,你說我怎么就攤上這事崖技÷咦。” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵迎献,是天一觀的道長瞎访。 經(jīng)常有香客問我,道長吁恍,這世上最難降的妖魔是什么扒秸? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任播演,我火速辦了婚禮,結(jié)果婚禮上伴奥,老公的妹妹穿的比我還像新娘写烤。我一直安慰自己,他們只是感情好拾徙,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布洲炊。 她就那樣靜靜地躺著,像睡著了一般尼啡。 火紅的嫁衣襯著肌膚如雪暂衡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天崖瞭,我揣著相機與錄音狂巢,去河邊找鬼。 笑死书聚,一個胖子當(dāng)著我的面吹牛唧领,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播寺惫,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼疹吃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了西雀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤歉摧,失蹤者是張志新(化名)和其女友劉穎艇肴,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叁温,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡再悼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了膝但。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冲九。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖跟束,靈堂內(nèi)的尸體忽然破棺而出莺奸,到底是詐尸還是另有隱情,我是刑警寧澤冀宴,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布灭贷,位于F島的核電站,受9級特大地震影響略贮,放射性物質(zhì)發(fā)生泄漏甚疟。R本人自食惡果不足惜仗岖,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望览妖。 院中可真熱鬧轧拄,春花似錦、人聲如沸讽膏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桅打。三九已至是嗜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挺尾,已是汗流浹背鹅搪。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留遭铺,地道東北人丽柿。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像魂挂,于是被迫代替她去往敵國和親甫题。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359

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