亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 php教程 PHP開發(fā) Mybatis與Hibernate的區(qū)別

Mybatis與Hibernate的區(qū)別

Jan 05, 2017 pm 05:23 PM

以前沒怎么用過mybatis,只知道與hibernate一樣是個orm數(shù)據(jù)庫框架。隨著使用熟練度的增加,發(fā)現(xiàn)它與hibernate區(qū)別是非常大的感興趣的朋友通過本文一起學(xué)習(xí)吧

趁著這個周末,抽空把一些常用的技術(shù)整理出來,小編還會不定期的更新內(nèi)容。

首先簡單介紹下兩者的概念:

Hibernate :Hibernate 是當(dāng)前最流行的ORM框架,對數(shù)據(jù)庫結(jié)構(gòu)提供了較為完整的封裝。

Mybatis:Mybatis同樣也是非常流行的ORM框架,主要著力點在于POJO 與SQL之間的映射關(guān)系。

其次具體從幾個方面說一下兩者的區(qū)別:

1.兩者最大的區(qū)別:

針對簡單邏輯,Hibernate和MyBatis都有相應(yīng)的代碼生成工具,可以生成簡單基本的DAO層方法。

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

2.開發(fā)難度對比

Hibernate的開發(fā)難度要大于Mybatis。主要由于Hibernate比較復(fù)雜、龐大,學(xué)習(xí)周期較長。

而Mybatis則相對簡單一些,并且Mybatis主要依賴于sql的書寫,讓開發(fā)者感覺更熟悉。

3.sql書寫比較

Mybatis的SQL是手動編寫的,所以可以按需求指定查詢的字段。不過沒有自己的日志統(tǒng)計,所以要借助log4j來記錄日志。

Hibernate也可以自己寫SQL來指定需要查詢的字段,但這樣就破壞了Hibernate開發(fā)的簡潔性。不過Hibernate具有自己的日志統(tǒng)計。

4.數(shù)據(jù)庫擴(kuò)展性比較

Mybatis由于所有SQL都是依賴數(shù)據(jù)庫書寫的,所以擴(kuò)展性,遷移性比較差。

Hibernate與數(shù)據(jù)庫具體的關(guān)聯(lián)都在XML中,所以HQL對具體是用什么數(shù)據(jù)庫并不是很關(guān)心。

5.緩存機(jī)制比較

相同點:Hibernate和Mybatis的二級緩存除了采用系統(tǒng)默認(rèn)的緩存機(jī)制外,都可以通過實現(xiàn)你自己的緩存或為其他第三方緩存方案,創(chuàng)建適配器來完全覆蓋緩存行為。

不同點:Hibernate的二級緩存配置在SessionFactory生成的配置文件中進(jìn)行詳細(xì)配置,然后再在具體的表-對象映射中配置是那種緩存。

MyBatis的二級緩存配置都是在每個具體的表-對象映射中進(jìn)行詳細(xì)配置,這樣針對不同的表可以自定義不同的緩存機(jī)制。并且Mybatis可以在命名空間中共享相同的緩存配置和實例,通過Cache-ref來實現(xiàn)。

兩者比較:因為Hibernate對查詢對象有著良好的管理機(jī)制,用戶無需關(guān)心SQL。所以在使用二級緩存時如果出現(xiàn)臟數(shù)據(jù),系統(tǒng)會報出錯誤并提示。

而MyBatis在這一方面,使用二級緩存時需要特別小心。如果不能完全確定數(shù)據(jù)更新操作的波及范圍,避免Cache的盲目使用。否則,臟數(shù)據(jù)的出現(xiàn)會給系統(tǒng)的正常運行帶來很大的隱患。

6.總結(jié):

mybatis:小巧、方便、高效、簡單、直接、半自動
hibernate:強大、方便、高效、復(fù)雜、繞彎子、全自動

Hibernate與MyBatis都可以是通過SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session來開啟執(zhí)行事務(wù)和SQL語句。

而MyBatis的優(yōu)勢是MyBatis可以進(jìn)行更為細(xì)致的SQL優(yōu)化,可以減少查詢字段,并且容易掌握。

Hibernate的優(yōu)勢是DAO層開發(fā)比MyBatis簡單,Mybatis需要維護(hù)SQL和結(jié)果映射。數(shù)據(jù)庫移植性很好,MyBatis的數(shù)據(jù)庫移植性不好,不同的數(shù)據(jù)庫需要寫不同SQL。有更好的二級緩存機(jī)制,可以使用第三方緩存。MyBatis本身提供的緩存機(jī)制不佳。

mybatis:

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

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

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

4. 二級緩存機(jī)制不佳。

hibernate:

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

2. 有更好的二級緩存機(jī)制,可以使用第三方緩存。

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

mybatis:機(jī)械工具,使用方便,拿來就用,但工作還是要自己來作,不過工具是活的,怎么使由我決定。

hibernate:智能機(jī)器人,但研發(fā)它(學(xué)習(xí)、熟練度)的成本很高,工作都可以擺脫他了,但僅限于它能做的事。??


更多Mybatis與Hibernate的區(qū)別相關(guān)文章請關(guān)注PHP中文網(wǎng)!


本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)