jOOQでクエリをカウントする
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 著者テーブルには
カウントクエリの実行は、いくつかの異なる方法で実行できます。
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);
使用することもできます
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で入手できます。