搜尋
首頁php教程PHP开发Mybatis與Hibernate的差別

以前沒怎麼用過mybatis,只知道跟hibernate一樣是個orm資料庫框架。隨著使用熟練度的增加,發現它與hibernate區別是非常大的有興趣的朋友透過本文一起學習吧

趁著這個週末,抽空把一些常用的技術整理出來,小編還會不定期的更新內容。

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

Hibernate :Hibernate 是目前最受歡迎的ORM框架,對資料庫結構提供了較為完整的封裝。

Mybatis:Mybatis同樣也是非常流行的ORM框架,主要著力點在於POJO 與SQL之間的映射關係。

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

1.兩者最大的區別:

針對簡單邏輯,Hibernate和MyBatis都有相應的程式碼產生工具,可以產生簡單基本的DAO層方法。

針對進階查詢,Mybatis需要手動編寫SQL語句,以及ResultMap。而Hibernate有良好的映射機制,開發者不需要關心SQL的生成與結果映射,可以更專注於業務流程。

2.開發難度對比

Hibernate的開發難度大於Mybatis。主要由於Hibernate比較複雜、龐大,學習週期較長。

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

3.sql書寫比較

Mybatis的SQL是手動寫的,所以可以依需求指定查詢的欄位。不過沒有自己的日誌統計,所以要使用log4j來記錄日誌。

Hibernate也可以自己寫SQL來指定需要查詢的字段,但這樣就破壞了Hibernate開發的簡潔性。不過Hibernate有自己的日誌統計。

4.資料庫擴充性比較

Mybatis由於所有SQL都是依賴資料庫書寫的,所以擴充性,遷移性比較差。

Hibernate與資料庫具體的關聯都在XML中,所以HQL對具體是用什麼資料庫並不是很在意。

5.快取機制比較

相同點:Hibernate和Mybatis的二級快取除了採用系統預設的快取機制外,都可以透過實作你自己的快取或為其他第三方快取方案,建立適配器來完全覆蓋快取行為。

不同點:Hibernate的二級快取配置在SessionFactory產生的設定檔中進行詳細配置,然後再在特定的表-物件映射中配置是那種快取。

MyBatis的二級快取配置都是在每個特定的表-物件映射中進行詳細配置,這樣針對不同的表可以自訂不同的快取機制。並且Mybatis可以在命名空間中共享相同的快取配置和實例,透過Cache-ref來實現。

兩者比較:因為Hibernate對查詢物件有著良好的管理機制,使用者不需要關心SQL。所以使用二級快取時如果出現髒數據,系統會報出錯誤並提示。

而MyBatis在這一方面,使用二級快取時需要特別小心。如果無法完全確定資料更新操作的波及範圍,避免Cache的盲目使用。否則,髒數據的出現會為系統的正常運作帶來很大的隱患。

6.總結:

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

Hibernate與MyBatis都可以是透過SessionFactoryBuider由XML配置檔案產生SessionFactory,接著由SessionFactory 產生Session,最後由Session來開啟執行交易和SQL語句。

而MyBatis的優勢是MyBatis可以進行更為細緻的SQL優化,可以減少查詢字段,並且容易掌握。

Hibernate的優勢是DAO層開發比MyBatis簡單,Mybatis需要維護SQL和結果映射。資料庫移植性很好,MyBatis的資料庫移植性不好,不同的資料庫需要寫不同SQL。有更好的二級快取機制,可以使用第三方快取。 MyBatis本身提供的快取機制不佳。

mybatis:

1. 入門簡單,即學即用,提供了資料庫查詢的自動物件綁定功能,而且延續了很好的SQL使用經驗,對於沒有那麼高的物件模型要求的專案來說,相當完美。

2. 可以進行更細緻的SQL最佳化,可以減少查詢欄位。

3. 缺點就是框架還是比較簡陋,功能尚有缺失,雖然簡化了資料綁定程式碼,但是整個底層資料庫查詢實際還是要自己寫的,工作量也比較大,而且不太容易適應快速資料庫修改。

4. 二級快取機制不佳。

hibernate:

1. 功能強大,資料庫無關性好,O/R映射能力強,如果你對Hibernate相當精通,而且對Hibernate進行了適當的封裝,那麼你的專案整個持久層程式碼會相當簡單,需要寫的程式碼很少,開發速度很快,非常爽。

2. 有更好的二級快取機制,可以使用第三方快取。

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

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

hibernate:智慧機器人,但研發它(學習、熟練度)的成本很高,工作都可以擺脫他了,但僅限於它能做的事。


更多Mybatis與Hibernate的區別相關文章請關注PHP中文網!


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。