jOOQ - DSL API



DSL 代表領域特定語言 (Domain Specific Language)。它比 Java 或 C 等通用語言簡單。DSL 專為特定類別的問題而設計。

例如,它用於 jOOQ 中,在 Java 中編寫 SQL 查詢。儘管這些查詢是用 Java 語言編寫的,但它們看起來幾乎像是 SQL 語句。讓我們透過一個例子來理解這個語句。

檢視這個簡單的 SQL 查詢:

SELECT *
FROM AUTHOR a
JOIN BOOK b ON a.ID = b.AUTHOR_ID
WHERE a.YEAR_OF_BIRTH > 1920
   AND a.LAST_NAME = 'Kanetkar'
ORDER BY b.TITLE;

上面的 SQL 查詢從 AUTHOR 表(別名為 a)中選擇所有列,並根據 AUTHOR 表中的 ID 列與 BOOK 表(別名為 b)中的 AUTHOR_ID 列匹配的條件與 BOOK 表連線。然後,它過濾結果,只包含 1920 年以後出生且姓氏為“Kanetkar”的作者,並按書籍標題對結果進行排序。

下面的程式碼片段顯示了相同的 SQL 查詢在 jOOQ 的 DSL 中的樣子:

Result<Record> result = create.select()
   .from(AUTHOR.as("a"))
   .join(BOOK.as("b")).on(a.ID.eq(b.AUTHOR_ID))
   .where(a.YEAR_OF_BIRTH.gt(1920)
   .and(a.LAST_NAME.eq("Kanetkar")))
   .orderBy(b.TITLE)
   .fetch();

SQL 與 DSL

SQL 或結構化查詢語言 (Structured Query Language) 用於透過 SQL 語句來管理關係資料庫。SQL 語句是允許使用者檢索、插入、更新和刪除資料的命令。

另一方面,DSL 設計用於在特定領域或應用領域內使用。它為該領域的需要提供特殊的語法和語義。

例如,jOOQ 中的 DSL 旨在簡化 Java 應用程式中 SQL 查詢的建立。

領域特定語言總是依賴於通用語言。在 jOOQ 的情況下,它需要與 Java 整合。但是,SQL 與任何程式語言無關。

jOOQ 中的 DSL

如前所述,DSL 是在 jOOQ 中編寫 SQL 查詢的主要方式。我們還看到了它與 SQL 語句的相似之處。此外,使用 jOOQ 的 DSL 的主要好處之一是其基於 BNF 的介面層次結構。它可以防止錯誤的查詢語法編譯,從而防止錯誤的查詢編譯並避免執行時錯誤。

在 JOOQ 中,DSL 類和 DSLContext 介面協同工作。DSL 類是一個實用程式類,它提供用於建立表、欄位和查詢的工廠方法。但是,如果不使用 DSLContext,則無法執行查詢,因為 DSLContext 負責管理資料庫連線並執行查詢。

示例

在上一章中,我們在“mydatabase”資料庫中建立了“employee”表。讓我們看看一個列印“employee”表內容的查詢。

// Fetch the values from the employee table
Result<Record> result = create.select(id, name, jobTitle)
   .from(employee)
   .fetch();

// Print the results
for (Record record : result) {
   Integer employeeId = record.get(id);
   String employeeName = record.get(name);
   String employeeJobTitle = record.get(jobTitle);
   System.out.println("ID: " + employeeId + ", Name: " + employeeName + ", Job Title: " + employeeJobTitle);
}

常用的 jOOQ DSL 方法

jOOQ DSL 類的常用方法如下:

  • using():此方法從 JDBC 連線和 SQL 方言建立 DSLContext 例項。

  • select():用於建立 Select 查詢。

  • insertInto():用於建立 Insert 查詢。

  • update():用於建立 Update 查詢。

  • deleteFrom():用於建立 Delete 查詢。

廣告
© . All rights reserved.