1. 概要

このチュートリアルでは、jOOQオブジェクト指向クエリ(単に jOOQ とも呼ばれます)を使用してカウントクエリを実行する方法を示します。 jOOQは、JavaでタイプセーフなSQLクエリを作成するのに役立つ人気のあるJavaデータベースライブラリです。

2. jOOQ

jOOQはORMの代替手段です。 他のほとんどのORMとは異なり、 jOOQはリレーショナルモデル中心であり、ドメインモデル中心ではありません。 たとえば、 Hibernate は、自動的にSQLに変換されるJavaコードを作成するのに役立ちます。 ただし、jOOQを使用すると、SQLを使用してデータベースにリレーショナルオブジェクトを作成し、それらのオブジェクトにマップするJavaコードを生成できます。

3. Mavenの依存関係

このチュートリアルでは、jooqモジュールが必要です。

<dependency> 
    <groupId>org.jooq</groupId> 
    <artifactId>jooq</artifactId> 
    <version>3.14.8</version> 
</dependency>

4. カウントクエリ

データベースにauthorテーブルがあるとします。 The 著者テーブルには id、first_name、およびlast_name。

カウントクエリの実行は、いくつかの異なる方法で実行できます。

4.1. fetchCount

DSL.fetchCount には、テーブル内のレコード数をカウントする方法が複数あります。

まず、 fetchCount(表>テーブル) レコード数をカウントする方法:

int count = dsl.fetchCount(DSL.selectFrom(AUTHOR));
Assert.assertEquals(3, count);

次に、試してみましょう fetchCount(表>テーブル) との方法 selectFrom メソッドとどこレコード数をカウントする句:

int count = dsl.fetchCount(DSL.selectFrom(AUTHOR)
  .where(AUTHOR.FIRST_NAME.equalIgnoreCase("Bryan")));
Assert.assertEquals(1, count);

さあ、やってみましょう the fetchCount(表>表、条件条件) レコード数をカウントする方法:

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

使用することもできます fetchCount(表>テーブル、コレクション<? 条件>条件を拡張します) 複数の条件の方法:

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);

または、と(条件条件)を使用して、インライン条件を組み合わせることができます。

int count = dsl.fetchCount(AUTHOR, AUTHOR.FIRST_NAME.equalIgnoreCase("Bryan").and(AUTHOR.ID.notEqual(1)));
Assert.assertEquals(1, count);

4.2. カウント

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 メソッドを使用して、使用可能なレコードの数を取得することもできます。

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 with groupBy メソッドを使用して、レコード数をカウントすることを検討しました。 。

いつものように、このチュートリアルで使用されるすべてのコードサンプルはGitHubで入手できます。