环境
Java:1.8
jooq: 3.9.6
前言
今天在写jooq
Java代码时,突发奇想,如何重命名某个字段并返回所有字段
。
因为业务上大部分都是如下这种代码:
dsl.select().from(PRICE_RULE_ENTRY_FIXED).join(PRICE_RULE)
.on(PRICE_RULE_ENTRY_FIXED.RULE_ID.eq(PRICE_RULE.ID))
.where(PRICE_RULE.PURCHASER_ID.eq(purchaserId).and(PRICE_RULE.TYPE.eq(priceRuleType)))
.fetchInto(PriceRuleEntryFixed.class);
正常情况下,满足大部分需要;
但是如果两张表有重复字段,比如表A有createtime字段,表B也有这个字段,并且他们的值是不一样的。当这两个表关联查询时,使用上面的代码就不能同时取到createtime
字段。
正文
我对jooq
也不是很了解,目前只是会有阶段。直接上代码:
dsl.select(PRICE_RULE.fields()).select(PRICE_RULE_ENTRY.fields()).select(field(PRICE_RULE.CREATED).as("yutao")).from(PRICE_RULE_ENTRY).join(PRICE_RULE)
.on(PRICE_RULE_ENTRY.RULE_ID.eq(PRICE_RULE.ID))
.where(PRICE_RULE.PURCHASER_ID.eq(purchaserId).and(PRICE_RULE.TYPE.eq(priceRuleType)))
.fetchInto(PriceRuleEntryVO.class);
重点就是:
dsl.select(PRICE_RULE.fields()).select(PRICE_RULE_ENTRY.fields())
.select(field(PRICE_RULE.CREATED).as("yutao"))
本来我是写
dsl.select("*").select(PRICE_RULE_ENTRY.fields())
.select(field(PRICE_RULE.CREATED).as("yutao"))
但是select
方法里是要映射具体某个类的,比如int就要映射Integer
类
而"*"
,其不知道映射哪个类的。
要向或者表的所有字段可以表名.fields()
灵感地址:
http://www.jooq.org/doc/3.0/manual/getting-started/use-cases/jooq-as-a-standalone-sql-builder/