Как написать количество запросов в JOOQ
Я конвертирую чистый SQL в JOOQ теперь у меня есть это
("SELECT Count(*) Count From Table ");
Я должен написать это в JOOQ, как мы можем написать это?
selectQueryRecord.addSelect(Here Count Function );
selectQueryRecord.addFrom(Table);
3 ответа
Самый простой способ реализовать то, что вы запрашиваете, это с помощью selectCount()
:
int count =
DSL.using(configuration)
.selectCount()
.from(Table)
.fetchOne(0, int.class);
Кроме того, вы можете явно выразить count()
функция:
int count =
DSL.using(configuration)
.select(DSL.count())
.from(Table)
.fetchOne(0, int.class);
Есть другая альтернатива для получения count(*)
любого произвольного select
выражение, которое поможет вам избежать указания индекса столбца результата и введите выше fetchOne()
метод. Это использует fetchCount()
:
int count =
DSL.using(configuration)
.fetchCount(DSL.selectFrom(Table));
Остерегайтесь, однако, что это делает вложенный выбор следующим образом:
SELECT COUNT(*) FROM (SELECT a, b, ... FROM Table)
Я использую следующий синтаксис для этого:
import org.jooq.impl.DSL.count
...
int count =
DSL.using(configuration)
.selectCount()
.from(Table)
.fetchOne(count());
Это менее многословно и проще.
Ответ Лукаса датируется 2013 годом, возможно, такого решения не существовало в то время.
Вот решение, которое мы должны использовать, как это
selectQueryRecord.fetchCount();
Я использовал это:
Integer count = DSL.selectCount().from(Table).where(Table.FIELD.eq(value)).fetchOneInto(Integer.class);
НОТА:
Устаревшее. - 3.5.0 - [#3356] - Этот метод удаляется, так как он до смешного отличается от всех других типов методов ResultQuery.fetch() тем, что он изменяет исходный оператор Select, заключая его в оболочку. В частности, этот метод можно легко спутать с ResultQuery.fetch(Field) или, более конкретно, fetch (count ()), который имеет совершенно другую семантику. Вместо этого используйте DSLContext.fetchCount(Select). Выполните этот запрос в контексте подключенного исполнителя и верните значение COUNT(*).
Я думаю, что правильный способ написать get будет выглядеть так:
SelectQuery<Record> selectQueryCount = transaction.selectQuery();
selectQueryCount.addFrom(Table);
Result<Record> resultObject = selectQueryRecord.fetchCount();