Перейти к основному содержимому

Подсчет запросов в jOOQ

· 3 мин. чтения

1. Обзор

В этом руководстве мы покажем, как выполнить запрос на подсчет с помощью объектно-ориентированных запросов jOOQ , также известного как просто jOOQ . jOOQ — это популярная библиотека баз данных Java, которая помогает вам писать безопасные SQL-запросы на Java.

2. джООК

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. Подсчет запросов

Допустим, у нас есть таблица авторов в нашей базе данных. Таблица авторов содержит id, first_name и last_name.

Выполнение запроса на подсчет можно выполнить несколькими способами.

4.1. fetchCount ``

DSL.fetchCount имеет несколько способов подсчета количества записей в таблице.

Во-первых, давайте посмотрим на метод fetchCount (Table<?> table) для подсчета количества записей:

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

Далее попробуем метод fetchCount (Table<?> table) с методом selectFrom и предложением where для подсчета количества записей:

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

Теперь давайте попробуем метод fetchCount (Таблица <?> таблица, условие условия) для подсчета количества записей:

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

Мы также можем использовать метод fetchCount (Table<?> table, Collection<? extends Condition> условия) для нескольких условий:

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

В качестве альтернативы мы можем использовать and(Condition condition) для объединения встроенных условий:

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. С группойПо

Попробуем использовать методы 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 для подсчета количества записей. ``

Как обычно, все примеры кода, используемые в этом руководстве, доступны на GitHub.