jOOQ中的計數查詢

1.概述

在本教程中,我們將演示如何使用jOOQ面向對象查詢(也稱為jOOQ)執行計數查詢。 jOOQ是一個流行的Java數據庫庫,可幫助您用Java編寫類型安全的SQL查詢。

2. jOOQ

jOOQ是ORM替代方案。與大多數其他ORM不同, jOOQ以關係模型為中心,而不是以領域模型為中心。例如,Hibernate幫助我們編寫Java代碼,然後將其自動轉換為SQL。但是,jOOQ允許我們使用SQL在數據庫中創建關係對象,然後它生成Java代碼以映射到那些對象。

3. Maven依賴

在本教程中,我們將需要jooq

< dependency >

 < groupId > org.jooq </ groupId >

 < artifactId > jooq </ artifactId >

 < version > 3.14.8 </ version >

 </ dependency >

4.計數查詢

假設我們的數據庫中有一個author author表包含一個id, first_name, and last_name.

運行計數查詢可以通過幾種不同的方式來完成。

4.1 fetchCount

DSL.fetchCount具有多種方法來計算表中的記錄數。

首先,讓我們看一下**fetchCount ​(Table<?> table)**方法來計算記錄數:

int count = dsl.fetchCount(DSL.selectFrom(AUTHOR));

 Assert.assertEquals(3, count);

接下來,讓我們嘗試使用帶有selectFrom方法和where **fetchCount ​(Table<?> table)**方法來計算記錄數:

int count = dsl.fetchCount(DSL.selectFrom(AUTHOR)

 .where(AUTHOR.FIRST_NAME.equalIgnoreCase("Bryan")));

 Assert.assertEquals(1, count);

現在,讓我們嘗試**fetchCount ​(Table<?> table, Condition condition)**方法來計算的記錄數:

int count = dsl.fetchCount(AUTHOR, AUTHOR.FIRST_NAME.equalIgnoreCase("Bryan"));

 Assert.assertEquals(1, count);

我們還可以對多個條件**fetchCount ​(Table<?> table, Collection<? extends Condition> conditions)**

Condition firstCond = AUTHOR.FIRST_NAME.equalIgnoreCase("Bryan");

 Condition secondCond = AUTHOR.ID.notEqual(1);

 List<Condition> conditions = new ArrayList<>();

 conditions.add(firstCond);

 conditions.add(secondCond);

 int count = dsl.fetchCount(AUTHOR, conditions);

 Assert.assertEquals(1, count);

在這種情況下,我們將過濾條件添加到列表中,並將其提供給fetchCount方法。

fetchCount方法還允許在多個條件下使用varargs:

Condition firstCond = AUTHOR.FIRST_NAME.equalIgnoreCase("Bryan");

 Condition secondCond = AUTHOR.ID.notEqual(1);

 int count = dsl.fetchCount(AUTHOR, firstCond, secondCond);

 Assert.assertEquals(1, count);

4.2 count

讓我們嘗試使用count方法來獲取可用記錄的數量:

int count = dsl.select(DSL.count()).from(AUTHOR)

 .fetchOne(0, int.class);

 Assert.assertEquals(3, count);

4.3 selectCount

現在,讓我們嘗試使用selectCount方法獲取可用記錄的計數:

int count = dsl.selectCount().from(AUTHOR)

 .where(AUTHOR.FIRST_NAME.equalIgnoreCase("Bryan"))

 .fetchOne(0, int.class);

 Assert.assertEquals(1, count);

4.4 簡單select

我們也可以使用簡單的select 獲取可用記錄數的方法:

int count = dsl.select().from(AUTHOR).execute();

 Assert.assertEquals(3, count);

4.5 用groupBy

讓我們嘗試使用selectcount方法來查找按字段分組的記錄數:

Result<Record2<String, Integer>> result = dsl.select(AUTHOR.FIRST_NAME, DSL.count())

 .from(AUTHOR).groupBy(AUTHOR.FIRST_NAME).fetch();

 Assert.assertEquals(3, result.size());

 Assert.assertEquals(result.get(0).get(0), "Bert");

 Assert.assertEquals(result.get(0).get(1), 1);

5.結論

在本文中,我們研究瞭如何在jOOQ中執行計數查詢。

我們已經研究了使用selectCount, count, fetchCount, select,countgroupBy方法來對記錄數進行計數。