Hibernate 與mybatis的區別

2021-08-01 02:31:44 字數 2665 閱讀 6772

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

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.總結:

hibernate

與mybatis

都可以是通過

sessionfactorybuider

由xml

配置檔案生成

sessionfactory

,然後由

sessionfactory 

生成session

,最後由

session

來開啟執行事務和

sql語句。

而mybatis的優勢是mybatis

可以進行更為細緻的

sql優化,可以減少查詢字段,並且容易掌握。

hibernate的優勢是dao

層開發比

mybatis

簡單,mybatis

需要維護

sql和結果對映。

資料庫移植性很好,

mybatis

的資料庫移植性不好,不同的資料庫需要寫不同

sql。

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

mybatis

本身提供的快取機制不佳。

spring整合使用持久層框架mybatis(二)

id sqlsessionfactory class org.mybatis.spring.sqlsessionfactorybean name datasource ref datasource name configlocation value classpath mybatis config....

hibernate與mybaitis快取對比

hibernate的一級快取為session,是內建快取,不可解除安裝。二級快取為sessionfactory,包含了內建快取和外接快取,sessionfactory 控制的程序級快取。是全域性共享的快取,凡是會呼叫二級快取的查詢方法 都會從中受益。當查詢時候,會首先查詢一級快取中的資料,如果沒有再...

Hibernate與JDO肩並肩

在theserverside.com上有一些人聲稱jdo的開發人員已經把jdo帶向錯誤的道路,並且指出hibernate相對更優秀。然而,根據我的經驗 它們有許多共同的特徵,包括 因此,jdo 和 hibernate 兩種版本的同一應用程式經常很相似。關於如何裝載物件和執行查詢,我們來看看下面的例子...