JPA 入門實戰(1)--簡介

来源:https://www.cnblogs.com/wuyongyin/archive/2022/08/13/16493175.html
-Advertisement-
Play Games

Python 絕對是一門易學難精的語言,打著簡單語法的旗號把我忽悠過來,最後發現它背後隱藏了許多複雜的實現。 如果不是作為 “玩具” 語言來學習,一定要看看全方位細緻講解的書《Python學習手冊第5版》。它涵蓋了 Python 的每一個角落,讓我明白了版本差異、作用域、函數式編程工具、相對導入、m ...


JPA(Java Persistence API) 是 SUN 公司推出的一套 ORM 規範,充當 Java 對象和關係資料庫系統之間的橋梁;本文主要介紹其基本概念。

1、JPA 發展歷史

JPA 1.0:於 2006 年發佈
JPA 2.0:於 2009 年末發佈
JPA 2.1:於 2013 年發佈,它有如下重要特性:
  1、Named Stored Procedure Query
  2、Stored Procedure Query
  3、Attribute Converter
  4、Constructor Result Mapping
  5、Programmatic Named Queries
  6、Named Entity Graph
  7、Entity Graph
  8、JPQL Enhancements
  9、Criteria API Bulk Operations
  10、Unsynchronized Persistence Context
  11、Generating DB Schema
  12、CDI-Support in Entity Listener
  詳細說明可查看:https://thorben-janssen.com/jpa-21-overview/
JPA 2.2:於 2017 年發佈,它有如下重要特性:
  1、Stream query results
  2、Make annotations @Repeatable
  3、Support Java 8 Date and Time API
  4、Support CDI Injection in AttributeConverters
  5、Change Persistence Provider Discovery Mechanism for Java 9 Modules
  6、Summary
  詳細說明可查看:https://thorben-janssen.com/whats-new-in-jpa-2-2
JPA 3.0:與 2020 年發佈,它有如下變化:
  1、包名修改,從 javax.persistence.* 修改為 jakarta.persistence.*
  2、配置文件命名空間修改,從 http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd 改為 https://jakarta.ee/xml/ns/persistence   https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd

2、JPA 提供商

JPA 只是一個規範,定義了一些介面,沒有提供實現;提供實現 JPA 規範的產品有:

Hibernate、EclipseLink、OpenJPA 等。

3、JPA 的優點

標準化
JPA 是 JCP 組織發佈的 Java EE 標準之一,因此任何聲稱符合 JPA 標準的框架都遵循同樣的架構,提供相同的訪問API,這保證了基於 JPA 開發的企業應用能夠經過少量的修改就能夠在不同的 JPA 框架下運行。
容器級特性的支持
JPA 框架中支持大數據集、事務、併發等容器級事務,這使得 JPA 超越了簡單持久化框架的局限,在企業應用發揮更大的作用。
簡單方便
JPA 的主要目標之一就是提供更加簡單的編程模型:在 JPA 框架下創建實體和創建 Java 類一樣簡單,沒有任何的約束和限制,只需要使用 javax.persistence.Entity 進行註釋,JPA 的框架和介面也都非常簡單,沒有太多特別的規則和設計模式的要求,開發者可以很容易地掌握。JPA 基於非侵入式原則設計,因此可以很容易地和其它框架或者容器集成。
查詢能力
JPA 的查詢語言是面向對象而非面向資料庫的,它以面向對象的自然語法構造查詢語句,可以看成是 Hibernate HQL 的等價物。JPA 定義了獨特的 JPQL(Java Persistence Query Language),JPQL 是 EJB QL 的一種擴展,它是針對實體的一種查詢語言,操作對象是實體,而不是關係資料庫的表,而且能夠支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能夠提供的高級查詢特性,甚至還能夠支持子查詢。
高級特性
JPA 中能夠支持面向對象的高級特性,如類之間的繼承、多態和類之間的複雜關係,這樣的支持能夠讓開發者最大限度的使用面向對象的模型設計企業應用,而不需要自行處理這些特性在關係資料庫的持久化。

4、JPA 類/介面說明

類/介面描述
EntityManagerFactory EntityManager 的工廠類,負責創建並管理 EntityManager 實例。
EntityManager 對象持久化操作的介面
Entity 實體對象
EntityTransaction 事務介面,與 EntityManager 是一對一的關係
Persistence 該類用於創建 EntityManagerFactory
Query JPQL 查詢介面,用於查詢或更新數據

類/介面之間的關係:

  • EntityManagerFactory 和 EntityManager 之間是一對多的關係。

  • EntityManager 和 EntityTransaction 之間是一對一.的關係,對於每個 EntityManager,都有一個 EntityTransaction。

  • EntityManager 和 Query 之間是一對多的關係,可以使用一個 EntityManager 執行多個查詢。

  • EntityManager 和 Entity 之間是一對多的關係,一個 EntityManage 可以管理多個實體。

5、JPA 常用註解

註解 說明 重要屬性
@Entity 聲明該類是一個實體類  
@Table 聲明實體類對應的表名  
@Id 聲明該屬性為主鍵  
@GeneratedValue 聲明主鍵的值自動生成

strategy:生成策略

generator:生成器

@SequenceGenerator 序列生成器 sequenceName:序列名
name:生成器名稱
@TableGenerator 表生成器,通過表生成id table:表名
name:生成器名稱
@Column 聲明屬性對應的欄位信息 name:欄位名稱
@Transient 聲明該屬性不持久到資料庫  
@NamedQuery 聲明靜態查詢  
@NamedQueries 聲明一組靜態查詢  
@OneToOne 一對一映射  
@OneToMany 一對多映射  
@ManyToOne 多對一映射  
@ManyToMany 多對多映射  

6、JPA Id 生成策略

JPA 提供四種 Id 生成策略:
GenerationType.TABLE:使用一個特定的表來保存主鍵
GenerationType.SEQUENCE:根據底層資料庫的序列來生成主鍵,條件是資料庫支持序列。
GenerationType.IDENTITY:主鍵由資料庫自動生成(主要是自動增長型欄位)
GenerationType.AUTO:主鍵由 JPA 實現產品控制(預設的策略)

各資料庫對策略的支持情況如下:

資料庫 支持的策略
MySQL

GenerationType.TABLE
GenerationType.AUTO
GenerationType.IDENTITY
不支持 GenerationType.SEQUENCE

Oracle

GenerationType.AUTO
GenerationType.SEQUENCE
GenerationType.TABLE
不支持 GenerationType.IDENTITY

PostgreSQL

GenerationType.TABLE
GenerationType.AUTO
GenerationType.IDENTITY
GenerationType.SEQUENCE
都支持

7、JPA JPQL

JPQL(Java Persistence Query Language)是一種面向對象的查詢語言,用於對持久化實體進行資料庫操作。JPQL 使用實體對象模型代替資料庫表來操作 SQL 查詢。JPA 會將 JPQL 轉換為 SQL,它為開發人員處理 SQL 任務提供了一個簡單的平臺。

JPQL 是實體 JavaBean 查詢語言 (EJBQL) 的擴展,為其添加了以下重要功能:

  • 它可以執行連接操作。
  • 它可以批量更新和刪除數據。
  • 它可以執行帶有排序和分組子句的聚合功能。
  • 單值和多值結果類型。

JPQL 有如下特點:

  • 它是一種獨立於平臺的查詢語言。
  • 它簡單而穩定。
  • 它可以與任何類型的資料庫一起使用,例如 MySQL、Oracle。
  • JPQL 查詢可以靜態地聲明到元數據中,也可以動態地構建在代碼中。

8、JPA Criteria API(標準 API)

Criteria API 是一套預定義的 API,用於定義實體查詢, 是替換 JPQL 查詢的另一種方法。 這些查詢是類型安全的、可移植的並且易於通過更改語法進行修改。 與 JPQL 類似,它遵循抽象模式(易於編輯)和對象嵌入。 元數據 API 與標準 API 混合在一起,為標準查詢建模持久實體。標準 API 的主要優點是可以在編譯時更早地檢測到錯誤。 基於字元串的 JPQL 查詢和基於 JPA 標準的查詢在性能和效率上是相同的。

Criteria API 的歷史:

在 JPA 2.0 中,開發了 Criteria API,使查詢標準化。
在 JPA 2.1 中,標準更新和刪除(批量更新和刪除)被增加進來。

 

 


 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • @(文章目錄) 前言 一、建項目 1. 在父項目ams-cloud下建立maven子項目ams-websocket 2.pom文件添加常用依賴,另外添加redis依賴等,我這裡直接引用common模塊 <dependencies> <dependency> <groupId>com.alibaba. ...
  • 準備工作 概述:微信掃碼支付是商戶系統按微信支付協議生成支付二維碼,用戶再用微信掃一掃完成支付的模式。該模式適用於PC網站支付、實體店單品或訂單支付、媒體廣告支付等場景。 第一步:註冊公眾號(類型須為:服務號):請根據營業執照類型選擇以下主體註冊:個體工商戶| 企業/公司| 政府| 媒體| 其他類型 ...
  • python的面向對象 面向對象與面向過程 面向過程 面向過程思想:需要實現一個功能的時候,看重的是開發的步驟和過程,每一個步驟都需要自己親力親為,需要自己編寫代碼(自己來做) 面向對象 面向對象的三大特征:封裝性、繼承性、多態性 面向對象思想:需要實現一個功能的時候,看重的並不是過程和步驟,而是關 ...
  • “Java有幾種文件拷貝方式,哪一種效率最高?” 這個問題是京東一面的時候,針對4年經驗的同學的一個面試題。 大家好,我是Mic,一個工作了14年的Java程式員。 關於這個問題的回答,我把文字版本整理到了15W字的面試文檔裡面。 大家可以在我的主頁加V領取。 下麵看看高手的回答。 高手: 第一種, ...
  • 首先確保全裝好WSL2和DockerDesktop,本文章不討論這個。 在DockerDesktop的Setting->Resources->Proxy 設置好代理,這樣能夠加快鏡像的拉取速度。 http://127.0.0.1:xxxx https://127.0.0.1:xxxx 使用如下命令安 ...
  • 實現流程 1. 實現緩存文章 1.1 實體類 package com.intehel.demo.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import ...
  • 閑著沒事總想搞點事情,這不是web版的微信有專門的實時收發消息api,可以用Python直接調用,但是現在基本上登錄不了web版微信,所以就用不了了。 但這不是還有windows版的微信嗎,於是在基於前輩寫好的第三方庫,今天我們來實現一下實時收發信息,實現自動聊天機器人。 效果展示 微信實時收發消息 ...
  • 最近幾個月,毒教材被曝光引發爭議,那些編寫度教材的人著實可惡。咱程式員也沒有手繪插畫能力,但咱可以藉助強大的深度學習模型將視頻轉動漫。所以今天的目標是讓任何具有python語言基本能力的程式員,實現短視頻轉動漫效果。 效果展示 一、思路流程 讀取視頻幀 將每一幀圖像轉為動漫幀 將轉換後的動漫幀轉為視 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...