手把手教你 Spring Boot 整合 Spring Data Jpa

  • 2019 年 11 月 6 日
  • 筆記

自從 Spring Boot 火起來之後,Jpa/Hibernate 這一套技術棧好像使用的人也慢慢變多了,不過還是有一些小夥伴不太清楚這裡邊的一些概念和具體用法,因此松哥今天就通過一篇短文+視頻實戰來向大家做個介紹。

1. Jpa

1.1 JPA 是什麼

  1. Java Persistence API:用於對象持久化的 API
  2. Java EE 5.0 平台標準的 ORM 規範,使得應用程序以統一的方式訪問持久層

1.2 JPA 和 Hibernate 的關係

  1. JPA 是 Hibernate 的一個抽象(就像 JDBC 和 JDBC 驅動的關係);
  2. JPA 是規範:JPA 本質上就是一種 ORM 規範,不是 ORM 框架,這是因為 JPA 並未提供 ORM 實現,它只是制訂了一些規範,提供了一些編程的 API 接口,但具體實現則由 ORM 廠商提供實現;
  3. Hibernate 是實現:Hibernate 除了作為 ORM 框架之外,它也是一種 JPA 實現
  4. 從功能上來說, JPA 是 Hibernate 功能的一個子集

1.3 JPA 的供應商

JPA 的目標之一是制定一個可以由很多供應商實現的 API,Hibernate 3.2+、TopLink 10.1+ 以及 OpenJPA 都提供了 JPA 的實現,Jpa 供應商有很多,常見的有如下四種:

  1. Hibernate:JPA 的始作俑者就是 Hibernate 的作者,Hibernate 從 3.2 開始兼容 JPA。
  2. OpenJPA:OpenJPA 是 Apache 組織提供的開源項目。
  3. TopLink:TopLink 以前需要收費,如今開源了。
  4. EclipseLink

1.4 JPA 的優勢

  1. 標準化: 提供相同的 API,這保證了基於 JPA 開發的企業應用能夠經過少量的修改就能夠在不同的 JPA 框架下運行。
  2. 簡單易用,集成方便: JPA 的主要目標之一就是提供更加簡單的編程模型,在 JPA 框架下創建實體和創建 Java 類一樣簡單,只需要使用 javax.persistence.Entity 進行註解;JPA 的框架和接口也都非常簡單。
  3. 可媲美JDBC的查詢能力: JPA的查詢語言是面向對象的,JPA 定義了獨特的JPQL,而且能夠支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能夠提供的高級查詢特性,甚至還能夠支持子查詢。
  4. 支持面向對象的高級特性: JPA 中能夠支持面向對象的高級特性,如類之間的繼承、多態和類之間的複雜關係,最大限度的使用面向對象的模型

1.5 JPA 包含的技術

  1. ORM 映射元數據:JPA 支持 XML 和 JDK 5.0 註解兩種元數據的形式,元數據描述對象和表之間的映射關係,框架據此將實體對象持久化到數據庫表中。
  2. JPA 的 API:用來操作實體對象,執行CRUD操作,框架在後台完成所有的事情,開發者從繁瑣的 JDBC 和 SQL 代碼中解脫出來。
  3. 查詢語言(JPQL):這是持久化操作中很重要的一個方面,通過面向對象而非面向數據庫的查詢語言查詢數據,避免程序和具體的 SQL 緊密耦合。

2. Spring Data

Spring Data 是 Spring 的一個子項目。用於簡化數據庫訪問,支持NoSQL 和 關係數據存儲。其主要目標是使數據庫的訪問變得方便快捷。Spring Data 具有如下特點:

  • SpringData 項目支持 NoSQL 存儲:
    1. MongoDB (文檔數據庫)
    2. Neo4j(圖形數據庫)
    3. Redis(鍵/值存儲)
    4. Hbase(列族數據庫)
  • SpringData 項目所支持的關係數據存儲技術:
    1. JDBC
    2. JPA
  • Spring Data Jpa 致力於減少數據訪問層 (DAO) 的開發量. 開發者唯一要做的,就是聲明持久層的接口,其他都交給 Spring Data JPA 來幫你完成
  • 框架怎麼可能代替開發者實現業務邏輯呢?比如:當有一個 UserDao.findUserById() 這樣一個方法聲明,大致應該能判斷出這是根據給定條件的 ID 查詢出滿足條件的 User 對象。Spring Data JPA 做的便是規範方法的名字,根據符合規範的名字來確定方法需要實現什麼樣的邏輯。

關於 Spring Data Jpa 更詳細的教程,我就不再贅述了,這裡就做一個簡單介紹,以後有機會了再向大家詳細介紹。

3. 實戰

接下來我們就通過一個簡單的案例來看看在 Spring Boot 中如何整合 Jpa (本視頻節選自松哥自製的 Spring Boot2 系列視頻教程,本集基於 Spring Boot2.1.6 錄製,麥有點問題,建議帶上耳機觀看哦)。

好了,看完後不知道大家有沒有 GET 到技能點呢?有問題歡迎留言討論。