來源:北大青鳥總部 2023年01月30日 10:21
我們都知道Java持久層框架訪問數(shù)據(jù)庫的方式大致分為兩種。一種以SQL核心,封裝一定程度的JDBC操作,比如:MyBatis。另一種是以Java實(shí)體類為核心,將實(shí)體類的和數(shù)據(jù)庫表之間建立映射關(guān)系,也就是我們說的ORM框架,如:Hibernate、Spring Data JPA。
今天咱們就來了解一下什么是Spring Data JPA。
首先JPA是啥?在開始學(xué)習(xí)Spring Data JPA之前我們首先還是要先了解下什么是JPA,因?yàn)镾pring Data JPA是建立的JPA的基礎(chǔ)之上的,那到底什么是JPA呢?
我們都知道不同的數(shù)據(jù)庫廠商都有自己的實(shí)現(xiàn)類,后來統(tǒng)一規(guī)范也就有了數(shù)據(jù)庫驅(qū)動,Java在操作數(shù)據(jù)庫的時(shí)候,底層使用的其實(shí)是JDBC,而JDBC是一組操作不同數(shù)據(jù)庫的規(guī)范。我們的Java應(yīng)用程序,只需要調(diào)用JDBC提供的API就訪問數(shù)據(jù)庫了。
而JPA也是類似的道理,JPA全稱為Java Persistence API(Java持久層API),它是Sun公司在JavaEE 5中提出的Java持久化規(guī)范。
JPA為Java開發(fā)人員提供了一種對象/關(guān)聯(lián)映射工具來管理Java應(yīng)用中的關(guān)系數(shù)據(jù)。
JPA吸取了目前Java持久化技術(shù)的優(yōu)點(diǎn),旨在規(guī)范、簡化Java對象的持久化工作。很多ORM框架都是實(shí)現(xiàn)了JPA的規(guī)范,如:Hibernate、EclipseLink。
需要注意的是JPA統(tǒng)一了Java應(yīng)用程序訪問ORM框架的規(guī)范。
JPA為我們提供了以下規(guī)范:
ORM映射元數(shù)據(jù):JPA支持XML和注解兩種元數(shù)據(jù)的形式,元數(shù)據(jù)描述對象和表之間的映射關(guān)系,框架據(jù)此將實(shí)體對象持久化到數(shù)據(jù)庫表中
JPA 的API:用來操作實(shí)體對象,執(zhí)行CRUD操作,框架在后臺替我們完成所有的事情,開發(fā)人員不用再寫SQL了
JPQL查詢語言:通過面向?qū)ο蠖敲嫦驍?shù)據(jù)庫的查詢語言查詢數(shù)據(jù),避免程序的SQL語句緊密耦合。
接下來我們繼續(xù)說一下Hibernate是啥?Hibernate是Java中的對象關(guān)系映射解決方案。對象關(guān)系映射或ORM框架是將應(yīng)用程序數(shù)據(jù)模型對象映射到關(guān)系數(shù)據(jù)庫表的技術(shù)。
Hibernate 不僅關(guān)注于從 Java 類到數(shù)據(jù)庫表的映射,也有 Java 數(shù)據(jù)類型到 SQL 數(shù)據(jù)類型的映射。
Hibernate和JPA是什么關(guān)系呢?
上面我們介紹到JPA是Java EE 5規(guī)范中提出的Java持久化接口,而Hibernate是一個(gè)ORM框架。
JPA和Hibernate的關(guān)系:
JPA是一個(gè)規(guī)范,而不是框架
Hibernate是JPA的一種實(shí)現(xiàn),是一個(gè)框架
那么Spring Data是啥?SpringData是Spring 社區(qū)的一個(gè)子項(xiàng)目,主要用于簡化數(shù)據(jù)(關(guān)系型&非關(guān)系型)訪問,其主要目標(biāo)是使得數(shù)據(jù)庫的訪問變得方便快捷。
1.它提供很多模板操作
Spring Data Elasticsearch
Spring Data MongoDB
Spring Data Redis
Spring Data Solr
2.強(qiáng)大的Repository和定制的數(shù)據(jù)儲存對象的抽象映射
3.對數(shù)據(jù)訪問對象的支持
Spring Data JPA是在實(shí)現(xiàn)了JPA規(guī)范的基礎(chǔ)上封裝的一套JPA應(yīng)用框架。雖然ORM框架都實(shí)現(xiàn)了JPA規(guī)范,但是在不同的ORM框架之間切換仍然需要編寫不同的代碼。
而使用SpringData JPA能夠方便大家在不同的ORM框架之間進(jìn)行切換而不要更改代碼。Spring Data JPA旨在通過將統(tǒng)一ORM框架的訪問持久層的操作,來提高開發(fā)人的效率。
Spring Data JPA給我們提供主要的類和接口。
Repository接口:
Repository
CrudRepository
JpaRepository
Repository實(shí)現(xiàn)類:
SimpleJpaRepository
QueryDslJpaRepository
以上這些類和接口就是我們以后在使用Spring Data JPA的時(shí)候需要掌握的。
Spring Data JPA和Hibernate的關(guān)系:
Hibernate其實(shí)是JPA的一種實(shí)現(xiàn),而Spring Data JPA是一個(gè)JPA數(shù)據(jù)訪問抽象。
也就是說SpringData JPA不是一個(gè)實(shí)現(xiàn)或JPA提供的程序,它只是一個(gè)抽象層,主要用于減少為各種持久層存儲實(shí)現(xiàn)數(shù)據(jù)訪問層所需的樣板代碼量。但是它還是需要JPA提供實(shí)現(xiàn)程序,其實(shí)Spring Data JPA底層就是使用的Hibernate實(shí)現(xiàn)。
有沒有被繞暈?總結(jié)一下:
Hibernate是JPA的一種實(shí)現(xiàn),是一個(gè)框架
Spring Data JPA是一種JPA的抽象層,底層依賴Hibernate
今天在這里主要給大家介紹了JPA、Hibernate、以及Spring Data JPA的概念以及三者的關(guān)系,讓大家對這些常用的持久層規(guī)范和框架有一個(gè)清晰的認(rèn)識。
相信大家在以后再接觸到其他的同類ORM框架或者其他持久層框架的時(shí)候就能更加的游刃有余。