如何从数据库中获取所有结果列,并在Jooq中具有其他自定义(concat,sum,count)列

2022-09-02 21:10:29

我有一个包含6列的表表1。

这是我需要映射的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”。我也想要Jooq中的7列。


答案 1

选项 1(使用星号):

(星号,星号)运算符已通过 DSL.asterisk() (非限定星号)或通过 Table.asterisk() (限定星号)添加到 jOOQ 3.11 中。它可以像投影的任何其他列一样使用。*

在 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()方法,该方法当然依赖于运行时存在的元信息,例如通过使用代码生成器。


答案 2

推荐