1

編集: jOOQ のバージョン 1.6.8 を使用します。新しいバージョンではこれが機能するはずです(回答を参照)

Jooqページング、ソートなどでデータのフェッチを処理するために使用するJava Webアプリケーションのグリッドモデルを作成しています...

最初に select を作成し、factory.select(...)これ ( SelectConditionStep) をパラメーターとして gridmodel に渡します。ここで、必要なベースのパラメーターを追加.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()です。次の 3 つのオプションがあります。

  • selectCount()の代わりに使用しselect(count())ます。便利な方法です
  • DSL.count()関数を完全修飾する
  • Factory からすべてのメソッドを静的にインポートします。

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

XYZStepタイプの参照:

XYZStep補足として、内部 DSL を実装するための補助型としてのみ使用されるjOOQ 型を直接参照する必要はありません。これは、代替手段が何であるかを説明するブログ投稿です。

于 2012-05-10T09:53:47.223 に答える