我现在正在将 Pure SQL 转换为 jOOQ 我有这个
("SELECT Count(*) Count From Table ");
我必须在jOOQ中写这个我们怎么写呢?
selectQueryRecord.addSelect(Here Count Function );
selectQueryRecord.addFrom(Table);
实现您所要求的最直接的方法是,通过使用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());
这不那么冗长和简单。
Lukas 的回答可以追溯到 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(*) 值。
我认为编写获取计数的正确方法是这样的:
SelectQuery<Record> selectQueryCount = transaction.selectQuery();
selectQueryCount.addFrom(Table);
Result<Record> resultObject = selectQueryRecord.fetchCount();