1

编辑:我使用 1.6.8 版的 jOOQ;在较新的版本中,这应该可以工作(见答案)

我正在为我的 Java Web 应用程序编写一个网格模型,用于Jooq处理通过分页、排序等获取数据...

首先,我创建一个选择factory.select(...)并将这个 ( SelectConditionStep) 作为参数传递给我的网格模型,我在其中添加所需的.limit().orderBy()基于参数的。

但我现在的问题是我还需要知道结果的总数(不仅仅是 1 页)来计算总页数。所以我的问题是是否有可能以某种方式从给定的SelectConditionStep.

我想将其包装为计数查询中的子查询;就像是:

(不起作用,只是为了展示这个想法)

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()...;
        }
4

1 回答 1

1

您更新的示例提到了count()未知。这其实是DSL.count()。你有三个选择:

  • 使用selectCount()而不是select(count()). 这是一种方便的方法
  • 完全限定DSL.count()函数
  • 从工厂静态导入所有方法:

    import static org.jooq.impl.DSL.*;
    

引用XYZStep类型:

附带说明一下,您永远不会觉得需要XYZStep直接引用 jOOQ 类型,它们仅用作实现内部 DSL 的辅助类型。这是一篇博客文章,解释了替代方案是什么

于 2012-05-10T09:53:47.223 回答