电竞比分网-中国电竞赛事及体育赛事平台

分享

Hibernate與mybatis的區(qū)別

 條山石頭 2015-07-11

為方便以后準(zhǔn)備面試,把一些常用的技術(shù)整理出來(lái),會(huì)不定期更新。

首先簡(jiǎn)單介紹下兩者的概念:

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

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

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

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

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

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

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

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

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

3.sql書寫比較

MybatisSQL是手動(dòng)編寫的,所以可以按需求指定查詢的字段。不過(guò)沒(méi)有自己的日志統(tǒng)計(jì),所以要借助log4j來(lái)記錄日志。

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


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

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

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

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

相同點(diǎn):HibernateMybatis的二級(jí)緩存除了采用系統(tǒng)默認(rèn)的緩存機(jī)制外,都可以通過(guò)實(shí)現(xiàn)你自己的緩存或?yàn)槠渌谌骄彺娣桨?,?chuàng)建適配器來(lái)完全覆蓋緩存行為。

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

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

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

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

6.總結(jié):

HibernateMyBatis都可以是通過(guò)SessionFactoryBuiderXML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session來(lái)開啟執(zhí)行事務(wù)和SQL語(yǔ)句。

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

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


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多