jOOQ中的計數查詢
- jOOQ
- java
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
讓我們嘗試使用select和count
方法來查找按字段分組的記錄數:
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,
和count
和groupBy
方法來對記錄數進行計數。