什麼是JPA

前言

JPA, 全稱Java Persistence API,翻譯爲JAVA持久層應用接口,JPA自己並非一個框架,它本質上是一種ORM規範,Hibernate是一個框架,也是JPA的一種實現。
image.pnghtml

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 中可以支持面向對象的高級特性,如類之間的繼承、多態和類之間的複雜關係,最大限度的使用面向對象的模型。

Java三層架構

剛纔咱們說JPA是JAVA持久層應用接口,那什麼是持久層呢?
Java有三層架構,分別爲持久層,業務層和表現層。
咱們簡稱爲SSH,即Struts(表示層)+Spring(業務層)+Hibernate(持久層)。
Struts是一個表示層框架,進行流程控制,主要做用是頁面展現,發送請求,接受請求,
Spring就是咱們熟知的後端框架,進行業務流轉,
Hibernate是一個持久層框架,它只負責與關係數據庫的操做。
image.pngjava

Hibernate

咱們原來使用JDBC鏈接來讀寫數據庫,咱們最多見的就是打開數據庫鏈接、使用複雜的SQL語句進行讀寫、關閉鏈接,得到的數據又須要轉換或封裝後往外傳,這是一個很是煩瑣的過程。這時出現了Hibernate框架,它須要你建立一系列的持久化類,每一個類的屬性均可以簡單的看作和一張數據庫表的屬性一一對應。這樣咱們不用在關注數據庫,只須要持久化類就能夠完成增刪改查的功能。使咱們的軟件開發真正面向對象, 而不是面向混亂的代碼。spring

JPA中的註釋

@Entity註釋
持久對象有時稱爲實體。附加@Entity到類,此類告知JPA應該保留此類及其對象。
具備此註釋的klass類。數據庫

@Entity
public class Klass {
...class body
}

@Table註釋
告訴JPA將實體(Klass類)持久化到Klass表中。參數name默認爲實體名稱,所以若是實體名稱與映射的表名稱一致時,@Table 註解經常能夠省略。以下所示。編程

@Entity
@Table(name="klass")
public class Klass {
...class body
}

指定主鍵
咱們使用JPA的@Id註釋將id字段指定爲Klass主鍵。用@GeneratedValue(strategy = GenerationType.IDENTITY)定義主鍵自增屬性。後端

@Entity
public class Klass {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}

定義關係類型
實體(數據表)與實體間的關係分爲如下四種:1對1,1對多,多對1,多對多;在英文中分別是OneToOne、OneToMany、ManyToOne、ManyToMany,在JPA聲明多對一外鍵以下api

@ManyToOne
private Teacher teacher;

總結

使用JPA大大簡化了咱們構造數據庫的的過程,也是咱們的過程面向對象,而且在團隊開發中,也使得代碼與本地數據庫一致。Spring Data JPA也是JPA,它更簡單、更強大。springboot

參考

什麼是JPA?Java Persistence API簡介
What is JPA? Introduction to the Java Persistence API
Spring Boot2 系列教程(二十三)理解 Spring Data Jpa
java三層架構:持久層、業務層、表現層的理解
第一節 JPA初始化數據表架構

相關文章
相關標籤/搜索