Hibernate與Mybatis對(duì)比
高郵網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),高郵網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為高郵數(shù)千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的高郵做網(wǎng)站的公司定做!今天同事跟我說(shuō)現(xiàn)在的小規(guī)模公司很少用hibernate,大部分都用mybatis。平時(shí)也經(jīng)常接觸這兩方面,正好最近不怎么忙,查看網(wǎng)上其他相關(guān)技術(shù)文檔 ,梳理下Mybatis和Hibernate對(duì)比,加深我們對(duì)持久化框架的理解。
一、簡(jiǎn)介
Hibernate
Hibernate是當(dāng)前最流行的ORM框架之一,對(duì)JDBC提供了較為完整的封裝。Hibernate的O/R Mapping實(shí)現(xiàn)了POJO 和數(shù)據(jù)庫(kù)表之間的映射,以及SQL的自動(dòng)生成和執(zhí)行。
Mybatis
Mybatis同樣也是非常流行的ORM框架,主要著力點(diǎn)在于 POJO 與 SQL 之間的映射關(guān)系。然后通過(guò)映射配置文件,將SQL所需的參數(shù),以及返回的結(jié)果字段映射到指定 POJO 。相對(duì)Hibernate“O/R”而言,Mybatis 是一種“Sql Mapping”的ORM實(shí)現(xiàn)。
二、開(kāi)發(fā)速度
難易度
Hibernate的真正掌握要比Mybatis困難,Hibernate比mybatis更加重量級(jí)一些。
Mybatis框架相對(duì)簡(jiǎn)單很容易上手,但也相對(duì)簡(jiǎn)陋些。
開(kāi)發(fā)工作量
Mybatis需要我們手動(dòng)編寫(xiě)SQL語(yǔ)句,回歸最原始的方式,所以可以按需求指定查詢的字段,提高程序的查詢效率。
Hibernate也可以自己寫(xiě)SQL語(yǔ)句來(lái)指定需要查詢的字段,但這樣破壞了Hibernate封裝以及簡(jiǎn)潔性。
三、數(shù)據(jù)庫(kù)移植性
Mybatis由于所有SQL都是依賴數(shù)據(jù)庫(kù)書(shū)寫(xiě)的,所以擴(kuò)展性,遷移性比較差。
Hibernate與數(shù)據(jù)庫(kù)具體的關(guān)聯(lián)都在XML中,所以HQL對(duì)具體是用什么數(shù)據(jù)庫(kù)并不是很關(guān)心。
四、緩存機(jī)制對(duì)比
相同點(diǎn)
Hibernate和Mybatis的二級(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)镠ibernate對(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)很大的隱患。
五、兩者對(duì)比總結(jié)
兩者相同點(diǎn)
Hibernate與MyBatis都可以是通過(guò)SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session來(lái)開(kāi)啟執(zhí)行事務(wù)和SQL語(yǔ)句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的
Hibernate和MyBatis都支持JDBC和JTA事務(wù)處理。
Hibernate優(yōu)勢(shì)
Hibernate的DAO層開(kāi)發(fā)比MyBatis簡(jiǎn)單,Mybatis需要維護(hù)SQL和結(jié)果映射。
Hibernate對(duì)對(duì)象的維護(hù)和緩存要比MyBatis好,對(duì)增刪改查的對(duì)象的維護(hù)要方便。
Hibernate數(shù)據(jù)庫(kù)移植性很好,MyBatis的數(shù)據(jù)庫(kù)移植性不好,不同的數(shù)據(jù)庫(kù)需要寫(xiě)不同SQL。
Hibernate有更好的二級(jí)緩存機(jī)制,可以使用第三方緩存。MyBatis本身提供的緩存機(jī)制不佳。
Mybatis優(yōu)勢(shì)
MyBatis可以進(jìn)行更為細(xì)致的SQL優(yōu)化,可以減少查詢字段。
MyBatis容易掌握,而Hibernate門檻較高。
一句話總結(jié)
在博文的結(jié)尾,我們將Mybatis和Hibernate之間的區(qū)別自個(gè)用六個(gè)詞做總結(jié):
Mybatis:小巧、方便、高效、簡(jiǎn)單、直接、半自動(dòng)化
Hibernate:強(qiáng)大、方便、高效、復(fù)雜、間接、全自動(dòng)化
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。