mybatis和hibernate的異同

2021-07-04 05:06:34 字數 1624 閱讀 8601

最近學習了mybatis,它也是乙個orm的持久層框架,但是它和hibernate還是有很大區別的,而且各有優缺點。

一、對映關係

hibernate實現了pojo和資料庫表之間的對映,以及sql的自動生成和執行,程式設計師只需定義好了pojo和資料庫的對映關係,就能通過hibernate提供的方法完成持久化的操作。程式設計師不需要對sql掌握熟練。

mybatis實現了pojo和sql的對映,通過對映配置檔案,將sql需要的引數、返回值對映到指定的pojo。相對於hibernate而言,它需要程式設計師熟練掌握sql。

二、移植性

hibernate與資料庫具體的關聯只需在xml檔案中配置即可,所有的hql語句與具體使用的資料庫無關,移植性很好

mybatis中所有的sql語句都依賴具體的資料庫寫的,所以移植性差

三、sql優化

hibernate查詢會將表中所有的字段查詢出來,這一點會消耗效能,hibernate也可以自己寫sql語句,但是這就破壞了hibernate開發的簡潔性。hibernate具有自己的日誌統計。

mybatis的sql是手動編寫的,所以按照需求查詢字段而且調整方便。mybatis本身不帶日誌統計,使用log4j進行日誌記錄。

四、快取機制

相同點:

hibernate

和mybatis

的二級快取除了採用系統預設的快取機制外,都可以通過實現你自己的快取或為其他第三方快取方案,建立介面卡來完全覆蓋快取行為。

不同點:hibernate

的二級快取配置在

sessionfactory

生成的配置檔案中進行詳細配置,然後再在具體的表

-物件對映中配置是那種快取。

mybatis

的二級快取配置都是在每個具體的表

-物件對映中進行詳細配置,這樣針對不同的表可以自定義不同的快取機制。並且

mybatis

可以在命名空間中共享相同的快取配置和例項,通過

cache-ref

來實現。

兩者比較

:因為hibernate

對查詢物件有著良好的管理機制,使用者無需關心

sql。所以在使用二級快取時如果出現髒資料,系統會報出錯誤並提示。

而mybatis

在這一方面,使用二級快取時需要特別小心。如果不能完全確定資料更新操作的波及範圍,避免

cache

的盲目使用。否則,髒資料的出現會給系統的正常執行帶來很大的隱患。

總結

hibernate的dao層開發比mybatis簡單,mybatis需要維護sql的結果對映

hibernate資料庫移植性好,mybatis的資料庫移植性不好,不同的資料庫要寫不同的sql

hibernate有更好的二級快取機制,mybatis提供的第三方快取機制不佳

mybatis可以進行更為細緻的sql優化,可以減少查詢字段,效能更好一些。

mybatis簡單易學,入門簡單,hibernate學習門檻高。 mybatis的缺點是框架還比較簡陋,功能尚有缺失,工作量比較大。

MyEclipse中刪除對Hibernate的支援

在myeclipse新增hibernate容易,刪除難,因為myeclipse中沒有刪除hibernate的功能鍵。但如果我們需要重新生成hibernate時,必須先徹底刪除hibernate支援。下面是手工刪除hibernate支援的方法 1.把專案根目錄下檔案.myhibernatedata刪除...

移除myeclipse中對hibernate的支援

在使用hibernate框架進行開發時可能會遇到配置錯誤或者需要刪除hibernate支援的情況。下面就說一下如何徹底移除專案的hibernate支援。移除後就能重新新增hibernate支援,重新配置了。1.找到你的專案的目錄 2.刪除.myhibernatedata檔案 3.找到.project...

Hibernate一級快取 Hibernate

1.session級別的快取,同session繫結,生命週期和session相同,當session銷毀,它也清除。管理以及快取的方法有clear evict clear清除session快取,evict將某個物件清除快取,相當於成為游離態detached。2.是實體級別的快取,只有在查詢物件級別的時...