Hibernate、Mybatis與Spring Data JPA的區別


1.概念:

Hibernate:Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。屬於全自動的ORM框架,着力點在於POJO和數據庫表之間的映射,完成映射即可自動生成和執行sql。

Mybatis:MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,並且改名為MyBatis 。屬於半自動的ORM框架,着力點在於POJO和SQL之間的映射,自己編寫sql語句,然后通過配置文件將所需的參數和返回的字段映射到POJO。

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

實現上:mybatis只有一個核心jar包,另外和spring整合需要mybatis-spring的jar包,使用緩存需要mybatis-ehcache的jar包,而hibernate需要一系列的jar包,這也側面反映了mybatis相對小巧,簡單,而hibernate相對來說比較強大,復雜;mybatis的配置主要包括一個用於映射各種類的xml文件以及和實體類一一對應的映射文件,hibernate包括hibernate.cfg.xml和實體類的配置文件hibernate.hbm.xml。

2.開發的難度:

Hibernate的開發難度要大於Mybatis、Spring Data。主要是由於Hibernate封裝了完整的對象關系映射機制,以至於內部的實現比較復雜、龐大,學習周期較長。
Mybatis 主要依賴於SQL的編寫與ResultMap的映射。
Spring Data易上手,通過命名規范、注解查詢簡化查詢操作。

3.查詢區別:

簡單查詢:
Hibernate 提供了基礎的查詢方法,也可以根據具體的業務編寫相應的SQL;
Mybatis需要手動編寫SQL語句;
Spring Data 繼承基礎接口,可使用內置的增刪改查方法。

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

4.數據庫的擴展性:

Hibernate與數據庫具體的關聯都在XML中,所以HQL對具體是用什么數據庫並不是很關心。遷移性好!

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

Spring Data 與數據具體的關聯可以通過命名規范查詢、注解查詢,無需關心數據庫的差異,但是通過本地化SQL查詢的話,就不易擴展。

5.緩存機制:

相同點: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查詢:

1.定義xml例如;userMapper.xml

2.定義接口userMapper 定義相關的方法 不必編寫接口的實現類

3.通過mybatis內部處理機制解析xml文件中的sql

4.調用存儲過程 {call 存儲過程名}

Spring Data查詢:

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

2.注解查詢:@Query(“ql語句”)

7.總結:

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

Mybatis 可以進行更細致的SQL優化,查詢必要的字段,但是需要維護SQL和查詢結果集的映射,而且數據庫的移植性較差,針對不同的數據庫編寫不同的SQL,

Spring Data JPA 極大的簡化了數據庫訪問,可以通過命名規范、注解的方式較快的編寫SQL。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM