编辑:我使用的是jOOQ版本1.6.8;在较新的版本中,这应该有效(见答案)
我正在使用Jooq
为我的java Web应用程序编写一个gridmodel来处理通过分页,排序等方式获取数据...
首先,我使用factory.select(...)
创建一个选择,并将此参数(SelectConditionStep
)作为参数传递给我的gridmodel,我根据参数添加所需的.limit()
和.orderBy()
。
但我现在的问题是我还需要知道结果的总数(不只是1页)来计算总页数。所以我的问题是,是否可以通过某种方式从给定的SelectConditionStep
创建计数查询。
我想把它作为一个子查询包装在一个count查询中;类似的东西:
(不起作用,只是为了表明这个想法)
factory.select(count()).from(selectConditionStep)...
MySQL中的我会这样做:
select count(*) from (select ...) as r
我当前的代码:
private final SelectConditionStep selectStep;
...
@Override
public int getAvailableRows() {
JooqSelect select = new JooqSelect() {
@SuppressWarnings("unchecked")
protected Result<Record> select(Connection connection) throws SQLException {
Factory create = new Factory(connection, dialect);
create.attach(selectStep);
/* This does not compile, just to show what I need */
return create.select(count()).from(selectConditionStep).fetch();
}
};
session.doWork(select);
/* Get result */
return select.getResult()...;
}
答案 0 :(得分:1)
您的更新示例提到count()
未知。事实上这是Factory.count()
。您有三种选择:
selectCount()
代替select(count())
。这是一种方便的方法Factory.count()
功能静态从Factory导入所有方法:
import static org.jooq.impl.Factory.*;
教程中记录了最后一个选项:
http://www.jooq.org/tutorial.php#step3
在各地的手册中