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.