如何从Jooq中的其他自定义(concat,sum,count)列获取数据库中的所有结果列
我有一个表有1列的表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 (使用星号):
*
(星号,星号)运算符已通过DSL.asterisk()
(非限定星号)或通过Table.asterisk()
(限定星号)添加到jOOQ 3.11。 它可以像投影的任何其他列一样使用。
在jOOQ 3.11之前,还有以下其他选项:
选项2 (使用DSL语法):
List> fields = new ArrayList>(); 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()
方法,该方法当然依赖于在运行时存在的这种元信息,例如通过使用代码生成器。