Java實用技能:一文了解JPA、Hibernate、Spring Data JPA的關係

前言

我們都知道Java 持久層框架訪問數據庫的方式大致分為兩種。一種以 SQL 核心,封裝一定程度的 JDBC 操作,比如: MyBatis。另一種是以 Java 實體類為核心,將實體類的和數據庫表之間建立映射關係,也就是我們說的ORM框架,如:Hibernate、Spring Data JPA。今天咱們就先來了解一下什麼是Spring Data JPA?

JPA是啥

在開始學習Spring Data JPA之前我們首先還是要先了解下什麼是JPA,因為Spring Data JPA是建立的JPA的基礎之上的,那到底什麼是JPA呢?

我們都知道不同的數據庫廠商都有自己的實現類,後來統一規範也就有了數據庫驅動,Java在操作數據庫的時候,底層使用的其實是JDBC,而JDBC是一組操作不同數據庫的規範。我們的Java應用程序,只需要調用JDBC提供的API就可以訪問數據庫了,而JPA也是類似的道理。

Java實用技能:一文了解JPA、Hibernate、Spring Data JPA的關係

JPA全稱為Java Persistence API(Java持久層API),它是Sun公司在JavaEE 5中提出的Java持久化規範。它為Java開發人員提供了一種對象/關聯映射工具,來管理Java應用中的關係數據,JPA吸取了目前Java持久化技術的優點,旨在規範、簡化Java對象的持久化工作。很多ORM框架都是實現了JPA的規範,如:Hibernate、EclipseLink。

需要注意的是JPA統一了Java應用程序訪問ORM框架的規範

JPA為我們提供了以下規範:

1. ORM映射元數據:JPA支持XML和註解兩種元數據的形式,元數據描述對象和表之間的映射關係,框架據此將實體對象持久化到數據庫表中

2. JPA 的API:用來操作實體對象,執行CRUD操作,框架在後臺替我們完成所有的事情,開發人員不用再寫SQL了

3. JPQL查詢語言:通過面向對象而非面向數據庫的查詢語言查詢數據,避免程序的SQL語句緊密耦合。

Hibernate是啥

Hibernate是Java中的對象關係映射解決方案。對象關係映射或ORM框架是將應用程序數據模型對象映射到關係數據庫表的技術。Hibernate 不僅關注於從 Java 類到數據庫表的映射,也有 Java 數據類型到 SQL 數據類型的映射。

Java實用技能:一文了解JPA、Hibernate、Spring Data JPA的關係


Hibernate 和 JPA是什麼關係呢

上面我們介紹到JPA是Java EE 5規範中提出的Java持久化接口,而Hibernate是一個ORM框架

JPA和Hibernate的關係:

• JPA是一個規範,而不是框架

• Hibernate是JPA的一種實現,是一個框架

Spring Data是啥

Spring Data是Spring 社區的一個子項目,主要用於簡化數據(關係型&非關係型)訪問,其主要目標是使得數據庫的訪問變得方便快捷。

• 它提供很多模板操作

– Spring Data Elasticsearch

– Spring Data MongoDB

– Spring Data Redis

– Spring Data Solr

• 強大的 Repository 和定製的數據儲存對象的抽象映射

• 對數據訪問對象的支持

Spring Data JPA又是啥

Spring Data JPA是在實現了JPA規範的基礎上封裝的一套 JPA 應用框架,雖然ORM框架都實現了JPA規範,但是在不同的ORM框架之間切換仍然需要編寫不同的代碼,而使用Spring Data JPA能夠方便大家在不同的ORM框架之間進行切換而不需要更改代碼。Spring Data JPA旨在通過將統一ORM框架的訪問持久層的操作,來提高開發人的效率。

Java實用技能:一文了解JPA、Hibernate、Spring Data JPA的關係


Spring Data JPA給我們提供的主要的類和接口

Repository 接口:

Repository

CrudRepository

JpaRepository

Repository 實現類:

SimpleJpaRepository

QueryDslJpaRepository

以上這些類和接口就是我們以後在使用Spring Data JPA的時候需要掌握的。

Spring Data JPA和Hibernate的關係

Hibernate其實是JPA的一種實現,而Spring Data JPA是一個JPA數據訪問抽象。也就是說Spring Data JPA不是一個實現或JPA提供的程序,它只是一個抽象層,主要用於減少為各種持久層存儲實現數據訪問層所需的樣板代碼量。但是它還是需要JPA提供實現程序,其實Spring Data JPA底層就是使用的 Hibernate實現。

總結就是:

• Hibernate是JPA的一種實現,是一個框架

• Spring Data JPA是一種JPA的抽象層,底層依賴Hibernate

總結:

這裡主要給介紹了JPA、Hibernate、以及Spring Data JPA的概念以及三者的關係,讓我們對這些常用的持久層規範和框架有一個清晰的認識。這樣以後我們再接觸到其他的同類ORM框架或者其他持久層框架的時候就能更加的遊刃有餘。


分享到:


相關文章: