[英]How to write Count Query In jOOQ
我正在将 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);
还有另一种方法可以获取任意select
表达式的count(*)
,它可以帮助您避免在上述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(*) 值。
我认为写 get 计数的正确方法是这样的:
SelectQuery<Record> selectQueryCount = transaction.selectQuery();
selectQueryCount.addFrom(Table);
Result<Record> resultObject = selectQueryRecord.fetchCount();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.