Как получить все столбцы результатов из базы данных с другими пользовательскими (concat, sum, count) столбцами в Jooq - PullRequest
14 голосов
/ 29 апреля 2011

У меня есть таблица Table1 с 6 столбцами.

Вот 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", в то время как мне нужно всестолбцы и один дополнительный столбец «IdCount».Я тоже хочу 7 столбцов в Jooq.

1 Ответ

23 голосов
/ 01 мая 2011

Вариант 1 (с использованием звездочки):

Оператор * (звездочка, звезда) был добавлен в jOOQ 3.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(), который, конечно, основан на такой мета-информации, присутствующей во время выполнения, например, с помощью генератора кода.

...