JPA、SpringData JPA 、Hibernate和Mybatis 的區別和聯系


轉自《JPA、SpringData JPA 、Hibernate和Mybatis 的區別和聯系

 

一、JPA 概述

1. Java Persistence API(Java 持久層 API):用於對象持久化的 API

2. 作用:使得應用程序以統一的方式訪問持久層

3. 前言中提到了 Hibernate,那么JPA 與 Hibernate究竟是什么關系呢:

1)JPA 是 Hibernate 的一個抽象,就像 JDBC 和 JDBC 驅動的關系

2)JPA 是一種 ORM 規范,是 Hibernate 功能的一個子集 (既然 JPA 是規范,Hibernate 對 JPA 進行了擴展,那么說 JPA 是 Hibernate 的一個子集不為過)

3)Hibernate 是 JPA 的一個實現

4. JPA 包括三個方面的技術:

1)ORM 映射元數據,支持 XML 和 JDK 注解兩種元數據的形式

2)JPA 的 API

3)查詢語言:JPQL

 

 

 

一、應用場合:

傳統公司、部分個人開發者喜歡用jpa;而互聯網公司更青睞於mybatis

原因:

1、mybatis更加靈活,開發迭代模式決定了他是互聯網公司的首先;每一次的修改不會帶來性能上的下降。

2、傳統公司需求迭代速度慢、項目改動小,hibernate可以做到一勞永逸;hibernate容易因為添加關聯關系或者開發者不了解優化導致項目,造成越改越糟糕。

二、各自特點:

1、mybatis官方文檔就說了他是一個半自動化的持久層框架,相對於按自動的hibernate更加靈活可控;

2、mybatis的學習成本低於hibernate。

3、使用hibernate需要對他有深入的了解,尤其是緩存方面,作為一個持久層框架,性能還是第一位的。

hibernate具有三級緩存,一級緩存默認是開啟的,二級緩存需要手動開始並配置優化,三級緩存可以整合業界流行的緩存技術:redis,ecache等等。

4、hibernate在關聯查詢中的懶加載。(在開發中,還是不建議去過多使用外鍵去關聯操作)

5、jpa是一種規范,hibernate也是遵從這種規范;

6、springDataJpa是對repository的封裝,簡化了repository的操作。

 

使用了一段時間jpa,而mybatis是之前一直在用的,不說區別是啥,因為有很多人比較這兩個框架了! 
從國內開源的應用框架來看,國內使用jpa做orm的人還是比較少,如果換成hibernate還會多一些,所以面臨的風險可能就是你會用,和你合作的人不一定會用,如果要多方協作,肯定要考慮這個問題! 
靈活性方面,jpa更靈活,包括基本的增刪改查、數據關系以及數據庫的切換上都比mybatis靈活,但是jpa門檻較高,另外就是更新數據需要先將數據查出來才能進行更新,數據量大的時候,jpa效率會低一些,這時候需要做一些額外的工作去處理! 

 

1.相對來說,jpa的學習成本比mybatis略高 
2.公司業務需求頻繁變更導致表結構復雜,此處使用mybatis比jpa更靈活 
3.就方言來講,一般公司選定數據庫后再變更微乎其微,所以此處方言的優勢可以忽略

 

很多人青睞 Mybatis ,原因是其提供了便利的 SQL 操作,自由度高,封裝性好……SpringData JPA對復雜 SQL 的支持不好,沒有實體關聯的兩個表要做 join ,的確要花不少功夫。

 

談起操作數據庫,大致可以分為幾個階段:首先是 JDBC 階段,初學 JDBC 可能會使用原生的 JDBC 的 API,再然后可能會使用數據庫連接池,比如:c3p0、dbcp,還有一些第三方工具,比如 dbutils 等,樓主認為 JDBC 是貫穿始終的,即使到了框架部分,也會對 JDBC 進行整合,此階段還是自己手寫 SQL 語句;下一個階段就是 Hibernate,大家體會到了操作數據庫可以不用自己手動編寫 SQL,調用 Hibernate 提供的 API 即可。


免責聲明!

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



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