回答

收藏

如何从数据库中获取所有结果列以及Jooq中的其他自定义(concat,sum,count

技术问答 技术问答 193 人阅读 | 0 人回复 | 2023-09-14

我有一个包含6列的表Table1。4 [* v/ w) U: X' P# a( U
这是我需要映射的sql语句。
% P, X; a& o! p9 x2 F5 S  uSelect *,count(ID) as IdCount from Table1;
: u$ [" E5 o# T* [4 Q" X( T现在,SQL查询结果将是7列(6个Table1列和1个IdCount列)。但是,当我在此查询的Jooq中实现相同功能时,它仅获得一个列“ IDCount”。
. O  {8 Q6 b( p& XSelectQuery q = factory.selectQuery();
4 u0 G2 d/ u" g6 J% s, e' z0 j0 [$ N        q.addSelect(Table1.ID.count().as("IdCount"));
4 u4 D8 x- b% A" q3 m        q.addFrom(Table1.TABLE1);0 M: ]4 b/ B& o# K$ [7 m  [
现在,结果记录集只有一个列“ IdCount”,而我需要的是所有列和一个附加列“ IdCount”。我也想要Jooq中的7列。
7 }$ d9 y1 u& S8 T7 h& x                ; q& y7 ]* h4 D
解决方案:5 A0 S* z# i. U; ~/ \8 o
               
; v/ z& @. {0 B( P5 c
9 H8 M( ^! d! E. u
# A" d; m% M3 p2 ^7 J# Z" |2 R- o                选项1 (使用星号):4 O0 Q5 x/ d9 l3 ^0 c3 V+ p. s. W) a
该*(星号,星)运营商已经通过加入jOOQ 3.11/ a/ x( X0 N3 ^+ N# r7 s0 O& H
DSL.asterisk()(不合格星号),或通过Table.asterisk()(合格的星号)。可以像投影任何其他列一样使用它。; G- F, e2 U1 K" R2 z& a; \) a, E; x
在jOOQ 3.11之前,还有以下其他选项:
- N* e- M$ K  Y. V* q选项2 (使用DSL语法):
* w( W: `3 D5 x  C. qList> fields = new ArrayList>();
8 [- f5 {/ W% ~9 [fields.addAll(Arrays.asList(Table1.TABLE1.fields()));
1 o4 g$ \3 v# A) F& |" E0 S7 l/ dfields.add(Table1.ID.count().as("IdCount"));3 n" b& X5 N% O( w
Select select = ctx.select(fields).from(Table1.TABLE1);
5 ]* o) l/ u' @. O8 m选项3 (使用“常规”语法):
. Y0 X: @5 d% I/ `2 D- o$ bSelectQuery q = factory.selectQuery();2 S* C& k; |8 a
q.addSelect(Table1.TABLE1.fields());0 l9 d4 ^( `2 r
q.addSelect(Table1.ID.count().as("IdCount"));' A3 W9 r$ f, |3 u  }1 i( y
q.addFrom(Table1.TABLE1);
8 [  O; p% c  E: G$ A3 u选项4 (在jOOQ的更高版本中添加):2 G4 |! B4 a4 x, e
// For convenience, you can now specify several "SELECT" clauses& _* b8 T5 ^0 B! a" T1 `/ D
ctx.select(Table1.TABLE1.fields())8 R& H& P5 d. E9 H
   .select(Table1.ID.count().as("IdCount")
2 ^- A5 A* d+ k# |   .from(Table1.TABLE1);1 \3 P7 y9 h: b& p
以上所有选项均使用该Table.fields()方法,该方法当然依赖于在运行时出现的此类元信息,例如通过使用代码生成器。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则