jOOQ编写MySQL查询时如何实现question.*选取表全字段
jOOQ实现查询指定表所有字段(对应SQL
表.*语法)的方案 针对你要转换的MySQL左连接查询:
select question.*, question_option.id from question left join question_option on question_option.question_id = question.id;
在jOOQ中无需逐一枚举question表的全部字段,有两种等价写法可以直接实现question.*的效果:
- 写法1:直接将jOOQ代码生成器生成的question表对象作为select参数传入,这是日常开发最常用的写法
// 静态导入生成的表常量 import static com.yourproject.generated.Tables.QUESTION; import static com.yourproject.generated.Tables.QUESTION_OPTION; // 构建查询 var fetchResult = dsl.select(QUESTION, QUESTION_OPTION.ID) .from(QUESTION) .leftJoin(QUESTION_OPTION) .on(QUESTION_OPTION.QUESTION_ID.eq(QUESTION.ID)) .fetch();
jOOQ渲染SQL时会自动为传入的表对象生成question.*片段,查询结果中可以直接通过表字段引用取值,也支持直接将question表对应的字段映射为自定义实体类。
- 写法2:调用表对象的
asterisk()方法,语义上和SQL的.*完全对应
var fetchResult = dsl.select(QUESTION.asterisk(), QUESTION_OPTION.ID) .from(QUESTION) .leftJoin(QUESTION_OPTION) .on(QUESTION_OPTION.QUESTION_ID.eq(QUESTION.ID)) .fetch();
注意:不要使用无表前缀的
dsl.asterisk()方法,该方法会生成全局的*,查出关联的所有表的全部字段,不符合只查询question表所有字段的需求。
内容的提问来源于stack exchange,提问作者Sai Uttej
相关产品推荐
相关产品推荐

