17

6列のテーブルTable1があります。

これが、マップする必要があるSQLステートメントです。

Select *,count(ID) as IdCount from Table1;

これで、SQL クエリの結果は 7 列になります (6 つの Table1 列と 1 つの IdCount 列)。しかし、このクエリでJooqに同じものを実装すると、単一の列「IDCount」しか得られません。

SelectQuery q = factory.selectQuery();
        q.addSelect(Table1.ID.count().as("IdCount"));
        q.addFrom(Table1.TABLE1);

今、結果のレコードセットには単一の列「IdCount」しかありませんが、必要なのはすべての列と1つの追加の列「IdCount」です。Jooq にも 7 つの列が必要です。

4

1 に答える 1

25

オプション1(アスタリスクを使用):

(アスタリスク、スター)演算子は、(修飾されていないアスタリスク)またはスルー(修飾されたアスタリスク)*を介してjOOQ3.11に追加されました。投影されている他の列と同じように使用できます。DSL.asterisk()Table.asterisk()

jOOQ 3.11より前は、次のオプションもありました。

オプション2(DSL構文を使用):

List<Field<?>> fields = new ArrayList<Field<?>>();
fields.addAll(Arrays.asList(Table1.TABLE1.fields()));
fields.add(Table1.ID.count().as("IdCount"));

Select<?> select = ctx.select(fields).from(Table1.TABLE1);

オプション3(使用した「通常の」構文を使用):

SelectQuery q = factory.selectQuery();
q.addSelect(Table1.TABLE1.fields());
q.addSelect(Table1.ID.count().as("IdCount"));
q.addFrom(Table1.TABLE1);

オプション4(jOOQの新しいバージョンで追加):

// For convenience, you can now specify several "SELECT" clauses
ctx.select(Table1.TABLE1.fields())
   .select(Table1.ID.count().as("IdCount")
   .from(Table1.TABLE1);

上記のオプションはすべて、このTable.fields()メソッドを使用しています。もちろん、コードジェネレーターを使用するなどして、実行時に存在するそのようなメタ情報に依存しています。

于 2011-04-30T22:29:53.500 に答える