Как написать Count Query В jOOQ

Я преобразовываю Pure SQL в jOOQ, теперь у меня это

("SELECT Count(*) Count From Table "); 

Мне нужно написать это в jOOQ, как мы можем написать его?

selectQueryRecord.addSelect(Here Count Function );
selectQueryRecord.addFrom(Table);

Ответ 1

Самый простой способ реализовать то, что вы запрашиваете, - это 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)

Ответ 2

Вот решение. Мы должны использовать это как

  selectQueryRecord.fetchCount();

Ответ 3

Я использую следующий синтаксис для этого:

import org.jooq.impl.DSL.count

... 

int count = 
DSL.using(configuration)
   .selectCount()
   .from(Table)
   .fetchOne(count());

Это менее многословно и проще.

Ответ Лукаса датируется 2013 годом, возможно, такого решения не существовало в то время.

Ответ 4

Я использовал это:

Integer count = DSL.selectCount().from(Table).where(Table.FIELD.eq(value)).fetchOneInto(Integer.class);

Ответ 5

Примечание:

Устаревшие. - 3.5.0 - [# 3356] - этот метод удаляется, поскольку он смутно отличается от всех других типов ResultQuery.fetch() методов, поскольку он изменяет исходный оператор Select путем упаковки Это. В частности, этот метод можно легко смутить ResultQuery.fetch(Поле) или более конкретная выборка (count()), которая имеет совершенно другая семантика. Использовать DSLContext.fetchCount(Выбрать) вместо. Выполните этот запрос в контексте его подключенного исполнителя и вернуть значение COUNT (*).

Я думаю, что правильный способ написать get count будет таким:

 SelectQuery<Record> selectQueryCount = transaction.selectQuery();
 selectQueryCount.addFrom(Table);

 Result<Record> resultObject = selectQueryRecord.fetchCount();