Persistence-API高級教程

一、概述

Persistence-API是Java EE的規範標準之一。

它定義了一種標準的ORM(Object-Relational Mapping)模型,使得Java開發人員可以通過簡單的API來與關係性資料庫進行交互,而無需關注特定的資料庫廠商的實現細節。

ORM技術的出現是為了解決面向對象編程和關係資料庫存儲之間的映射問題。

簡言之,這個標準次要把關係型資料庫(Relational Database,RDB)中的表數據映射成Java對象,讓開發人員可以操作Java對象,而不用擔心查詢和存儲數據在資料庫中時的問題。

二、Entity

在Persistence-API中,一個Entity就代表一個Java對象(POJO),這個對象的屬性映射到資料庫表中的列。

在Entity類上使用@Entity註解來指定這個類是個Entity,@Table註解來指定這個實體對應的表名。

下面是一個簡單的實體類的例子:

@Entity
@Table(name = "employee")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String name;

    private Integer age;

    // 省略getter/setter方法
}

在這個例子中,@Id註解表示這個屬性是實體類的主鍵;@GeneratedValue註解表示這個屬性的值是自動生成的,生成策略是IDENTITY;

三、EntityManager

EntityManager是Persistence-API操作Entity的核心API,它提供了標準的CRUD操作,例如:find、persist、remove、merge、createQuery等。

在使用EntityManager之前,需要先通過實體管理工廠(EntityManagerFactory)創建EntityManager。一個EntityManagerFactory代表一個數據源。

下面是如何獲取EntityManager的例子:

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("example-unit");
EntityManager entityManager = entityManagerFactory.createEntityManager();

其中,”example-unit”是配置文件persistence.xml中的持久化單元名稱。

通過entityManager,可以進行各種CRUD操作,例如:

// 查找Employee表中id為1的記錄
Employee employee = entityManager.find(Employee.class, 1);

// 將實體對象employee添加進資料庫
entityManager.persist(employee);

// 刪除實體對象employee
entityManager.remove(employee);

// 更新實體對象employee
employee.setName("Tom");
entityManager.merge(employee);

// 根據HQL語句查詢Employee對象列表
List<Employee> employeeList = entityManager.createQuery("FROM Employee", Employee.class).getResultList();

四、事務控制

由於EntityManager中對資料庫的操作都需要依賴事務,所以在進行持久化操作時需要對事務進行控制。

默認情況下,EntityManager的事務是自動提交的,也就是每進行一次操作就會自動提交一次。為了更好地控制事務,應該手動控制事務的開啟、提交和回滾。

下面是一個使用EntityManager進行事務控制的例子:

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("example-unit");
EntityManager entityManager = entityManagerFactory.createEntityManager();

// 開啟事務
entityManager.getTransaction().begin();

// 執行持久化操作
Employee employee = new Employee();
employee.setName("Tom");
entityManager.persist(employee);

// 提交事務
entityManager.getTransaction().commit();

// 關閉EntityManager
entityManager.close();

// 關閉EntityManagerFactory
entityManagerFactory.close();

五、JPQL

JPQL(Java Persistence Query Language)是一種面向對象的查詢語言,用於實現Object/Relational Mapping。它類似於SQL語句,但是它是面向對象的。

JPQL是由Persistence-API定義和規範,它不屬於任何特定的實現,所以可以跨不同的關係型資料庫使用。

JPQL支持SELECT、UPDATE、DELETE等語句。下面是一個JPQL查詢例子:

List<Employee> resultList = entityManager
                .createQuery("SELECT e FROM Employee e WHERE e.age > :age", Employee.class)
                .setParameter("age", 30)
                .getResultList();

使用@Entity註解指定一個類是Entity,使用@Table註解指定一個Entity對應的表。使用EntityManager進行CRUD操作,通過手動控制事務來更好地控制數據的操作。

以上就是本文對Persistence-API的詳細闡述。通過學習本文,相信你已經對Java EE中的ORM規範有了進一步的了解。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/269863.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-16 13:33
下一篇 2024-12-16 13:34

相關推薦

  • MQTT使用教程

    MQTT是一種輕量級的消息傳輸協議,適用於物聯網領域中的設備與雲端、設備與設備之間的數據傳輸。本文將介紹使用MQTT實現設備與雲端數據傳輸的方法和注意事項。 一、準備工作 在使用M…

    編程 2025-04-29
  • Python3.6.5下載安裝教程

    Python是一種面向對象、解釋型計算機程序語言。它是一門動態語言,因為它不會對程序員提前聲明變數類型,而是在變數第一次賦值時自動識別該變數的類型。 Python3.6.5是Pyt…

    編程 2025-04-29
  • Deepin系統分區設置教程

    本教程將會詳細介紹Deepin系統如何進行分區設置,分享多種方式讓您了解如何規劃您的硬碟。 一、分區的基本知識 在進行Deepin系統分區設置之前,我們需要了解一些基本分區概念。 …

    編程 2025-04-29
  • 掌握magic-api item.import,為你的項目注入靈魂

    你是否曾經想要導入一個模塊,但卻不知道如何實現?又或者,你是否在使用magic-api時遇到了無法導入的問題?那麼,你來到了正確的地方。在本文中,我們將詳細闡述magic-api的…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Qt雷達探測教程

    本文主要介紹如何使用Qt開發雷達探測程序,並展示一個簡單的雷達探測示例。 一、環境準備 在開始本教程之前,需要確保你的開發環境已經安裝Qt和Qt Creator。如果沒有安裝,可以…

    編程 2025-04-29
  • 猿編程python免費全套教程400集

    想要學習Python編程嗎?猿編程python免費全套教程400集是一個不錯的選擇!下面我們來詳細了解一下這個教程。 一、課程內容 猿編程python免費全套教程400集包含了從P…

    編程 2025-04-29
  • Python煙花教程

    Python煙花代碼在近年來越來越受到人們的歡迎,因為它可以讓我們在終端里玩煙花,不僅具有視覺美感,還可以通過代碼實現動畫和音效。本教程將詳細介紹Python煙花代碼的實現原理和模…

    編程 2025-04-29
  • 使用Snare服務收集日誌:完整教程

    本教程將介紹如何使用Snare服務收集Windows伺服器上的日誌,並將其發送到遠程伺服器進行集中管理。 一、安裝和配置Snare 1、下載Snare安裝程序並安裝。 https:…

    編程 2025-04-29
  • Python元祖排序:從基礎知識到高級應用

    Python元祖是一種不可變序列,通常用於將一組數據綁定在一起。元祖之間經常需要排序,本文將從基礎知識到高級應用,為你詳細講解Python元祖排序。 一、排序方法 Python提供…

    編程 2025-04-28

發表回復

登錄後才能評論