JPA、Hibernate、Mybatis的區別

1.概念:程序員

Hibernate :Hibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了很是輕量級的對象封裝,使得Java程序員能夠爲所欲爲的使用對象編程思惟來操縱數據庫。着力點對象與對象之間關係sql

2.簡介:數據庫

Mybatis:MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,而且更名爲MyBatis 。Mybatis:着力於POJO與SQL之間的映射關係apache

Spring Data:Spring Data:是一個用於簡化數據庫訪問,並支持雲服務的開源框架。其主要目標是使得對數據的訪問變得方便快捷,並支持map-reduce框架和雲計算數據服務。編程

3.開發的難度:緩存

Hibernate的開發難度要大於Mybatis、Spring Data。主要是因爲Hibernate封裝了完整的對象關係映射機制,以致於內部的實現比較複雜、龐大,學習週期較長。mybatis

Mybatis 主要依賴於SQL的編寫與ResultMap的映射。app

Spring Data易上手,經過命名規範、註解查詢簡化查詢操做。框架

 

4.查詢區別:學習

簡單查詢:Hibernate 提供了基礎的查詢方法,也能夠根據具體的業務編寫相應的SQL;

Mybatis須要手動編寫SQL語句,Spring Data 繼承基礎接口,可以使用內置的增刪改查方法。

高級查詢:Hibernate經過對象映射機制,開發者無需關心SQL的生成與結果映射,專一業務流程;Mybatis須要經過手動在XML文件中編寫SQL語句以及ResultMap或者註解,Spring Data 提供了命名規範查詢和註解查詢更簡便的編寫想要的SQL。

5.數據庫的擴展性:

Hibernate與數據庫具體的關聯都在XML中,因此HQL對具體是用什麼數據庫並非很關心。

Mybatis因爲全部SQL都是依賴數據庫書寫的,因此擴展性,遷移性比較差。

Spring Data 與數據具體的關聯能夠經過命名規範查詢、註解查詢,無需關心數據庫的差別,可是經過本地化SQL查詢的話,就不易擴展。

6.緩存機制:

 

相同點:Hibernate和Mybatis的二級緩存除了採用系統默認的緩存機制外,均可以經過實現你本身的緩存或爲其餘第三方緩存方案,建立適配器來徹底覆蓋緩存行爲。

不一樣點:Hibernate的二級緩存配置在SessionFactory生成的配置文件中進行詳細配置,而後再在具體的表-對象映射中配置是那種緩存。

MyBatis的二級緩存配置都是在每一個具體的表-對象映射中進行詳細配置,這樣針對不一樣的表能夠自定義不一樣的緩存機制。而且Mybatis能夠在命名空間中共享相同的緩存配置和實例,經過Cache-ref來實現。

Spring Data 能夠經過本身的緩存或者第三方緩存方案,配置知足本身業務須要的緩存行爲。

 


6.查詢方式:

Hibernate查詢:

 .1.HQL  --->from Admin as admin where admin.name =:name 使用命名參數,僅使用與Hiberante框架

2.Criteria---->對象化查詢 Criteria c = getSession().Criteria(Admin.class)

  c.add(Restrictions.eq("aname",name));//eq是等於,gt是大於,lt是小於,or是或
   c.add(Restrictions.eq("apassword", password));

3.DetachedCriteria----->動態分離查詢

4.例子查詢-Example.create(user).list()

5.sql查詢

Query q = s.createSQLQuery("select * from user").addEntity(User.class);

6.命名查詢:Query q = getSession().getNamedQuery(「getUserByID」);


Mybatis查詢:

 

l 定義xml例如;userMapper.xml

l 定義接口userMapper 定義相關的方法 沒必要編寫接口的實現類

l 經過mybatis內部處理機制解析xml文件中的sql 

l 調用存儲過程 {call 存儲過程名}

 

Spring Data查詢:

 

1.命名查詢,須要遵循Spring Data規範,例如findByUser、deleteById 等從右向左解析生成sql

2.註解查詢:@Query(「ql語句」)

 

7.總結:

 

Hibernate 對數據庫提供了較爲完整的封裝,封裝了基本的DAO層操做,有較好的數據庫移植性

Mybatis 能夠進行更細緻的SQL優化,查詢必要的字段,可是須要維護SQL和查詢結果集的映射,並且數據庫的移植性較差,針對不一樣的數據庫編寫不一樣的SQL,

 

Spring Data JPA 極大的簡化了數據庫訪問,能夠經過命名規範、註解的方式較快的編寫SQL。

 

ORM框架的使用須要根據具體的項目業務選擇更適合的技術方案,而不能一味地爲了技術而技術。

相關文章
相關標籤/搜索