如何使用 Jooq 中的其他自定义(concat、sum、count)列从数据库中获取所有结果列

Posted

技术标签:

【中文标题】如何使用 Jooq 中的其他自定义(concat、sum、count)列从数据库中获取所有结果列【英文标题】:How to get all the result columns from database with other custom(concat, sum, count) columns in Jooq 【发布时间】:2011-08-15 12:35:03 【问题描述】:

我有一个有 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”,而我需要的是所有列和一个附加列“IdCount”。我也想要 Jooq 中的 7 列。

【问题讨论】:

你想在 SQL 中做什么?在你可以将你的 SQL 语句映射到 jOOQ 之前,你必须清楚地了解你的 SQL 语句本身...... 修改了问题!希望你能回答。 【参考方案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() 方法,这当然依赖于运行时存在的此类元信息,例如通过使用代码生成器。

【讨论】:

很好的答案,非常有帮助,谢谢,但仅供参考,在我使用的 jOOQ 版本(jOOQ 3.6)中,字段方法返回Field[],所以在选项1中你必须写@ 987654334@ jooq.org/doc/3.11/manual/sql-building/sql-statements/… - jooq 支持星号。我不能让它工作,但它应该:) @MaksimGumerov:我假设您在这里指的是这个问题:github.com/jOOQ/jOOQ/issues/7841。我会尽快回复这个问题。感谢您记录它!

以上是关于如何使用 Jooq 中的其他自定义(concat、sum、count)列从数据库中获取所有结果列的主要内容,如果未能解决你的问题,请参考以下文章

jOOQ 自定义 Pojo 和 DAO 生成

jOOQ 不使用自定义数据绑定

在 jooq 的条件表达式中使用自定义数据类型

带有 MockResult 的 Jooq 自定义类型抛出 DataTypeException

带有自定义绑定的 JOOQ 批量插入

jOOQ:如何在选择查询中调用 Sql 用户定义函数