Java 如何将fetchMap()与RecordMapper一起使用?
我知道我可以拿一张这样的地图:Java 如何将fetchMap()与RecordMapper一起使用?,java,sql,jooq,Java,Sql,Jooq,我知道我可以拿一张这样的地图: this.ctx.select( shopSubscription.field(SHOP_SUBSCRIPTION.SHOP_ID), shopSubscription.field(SHOP_SUBSCRIPTION.PAYMENT_GATEWAY_SUBSCRIPTION_ID), shopSubscription.field(SHOP_SUBSCRIPTION.ADMIN_TOOL_FEATURE_TYPE_ID
this.ctx.select(
shopSubscription.field(SHOP_SUBSCRIPTION.SHOP_ID),
shopSubscription.field(SHOP_SUBSCRIPTION.PAYMENT_GATEWAY_SUBSCRIPTION_ID),
shopSubscription.field(SHOP_SUBSCRIPTION.ADMIN_TOOL_FEATURE_TYPE_ID),
PAYMENT_GATEWAY_SUBSCRIPTION.SUBSCRIPTION_ID_TOKEN
)
.from(PAYMENT_GATEWAY_SUBSCRIPTION)
.join(shopSubscription)
.on(PAYMENT_GATEWAY_SUBSCRIPTION.ID.eq(shopSubscription.field(SHOP_SUBSCRIPTION.PAYMENT_GATEWAY_SUBSCRIPTION_ID))
.and(PAYMENT_GATEWAY_SUBSCRIPTION.PAYMENT_GATEWAY_TYPE_ID.eq(paymentGatewayType)))
// For each record apply the map() function
.map(new RecordMapper<Record<?>, ShopSubscriptionDTO>() {
@Override
public ShopSubscriptionDTO map(Record<?> record) {
ShopSubscriptionDTO shopSubscriptionDto = new ShopSubscriptionDTO();
shopSubscriptionDto.setShopId(record.getValue(SHOP_SUBSCRIPTION.SHOP_ID)
// ...
return shopSubscriptionDto;
}
});
// Fetch the result into a map where the key is SHOP_SUBSCRIPTION.ADMIN_TOOL_FEATURE_TYPE_ID
.fetchMap(SHOP_SUBSCRIPTION.ADMIN_TOOL_FEATURE_TYPE_ID);
this.ctx.select(
shopSubscription.field(SHOP\u SUBSCRIPTION.SHOP\u ID),
shopSubscription.field(SHOP_SUBSCRIPTION.PAYMENT_GATEWAY_SUBSCRIPTION_ID),
shopSubscription.field(SHOP\u SUBSCRIPTION.ADMIN\u TOOL\u FEATURE\u TYPE\u ID),
支付\网关\订阅。订阅\标识\令牌
)
.发件人(支付\网关\订阅)
.加入(网上订购)
.on(支付网关订阅.ID.eq(shopSubscription.field(商店订阅.支付网关订阅.ID))
.和(支付\网关\订阅。支付\网关\类型\ ID.eq(支付网关类型)))
.fetchMap(付款\网关\订阅.付款\网关\类型\ ID,ShopSubscriptionDTO.class);
但是,为了在编译时检测问题,我更愿意在这个查询中添加一个RecordMapper
那么,有没有一种方法既可以调用fetchMap()
,又可以提供记录映射器
我想的是这样的:
this.ctx.select(
shopSubscription.field(SHOP_SUBSCRIPTION.SHOP_ID),
shopSubscription.field(SHOP_SUBSCRIPTION.PAYMENT_GATEWAY_SUBSCRIPTION_ID),
shopSubscription.field(SHOP_SUBSCRIPTION.ADMIN_TOOL_FEATURE_TYPE_ID),
PAYMENT_GATEWAY_SUBSCRIPTION.SUBSCRIPTION_ID_TOKEN
)
.from(PAYMENT_GATEWAY_SUBSCRIPTION)
.join(shopSubscription)
.on(PAYMENT_GATEWAY_SUBSCRIPTION.ID.eq(shopSubscription.field(SHOP_SUBSCRIPTION.PAYMENT_GATEWAY_SUBSCRIPTION_ID))
.and(PAYMENT_GATEWAY_SUBSCRIPTION.PAYMENT_GATEWAY_TYPE_ID.eq(paymentGatewayType)))
// For each record apply the map() function
.map(new RecordMapper<Record<?>, ShopSubscriptionDTO>() {
@Override
public ShopSubscriptionDTO map(Record<?> record) {
ShopSubscriptionDTO shopSubscriptionDto = new ShopSubscriptionDTO();
shopSubscriptionDto.setShopId(record.getValue(SHOP_SUBSCRIPTION.SHOP_ID)
// ...
return shopSubscriptionDto;
}
});
// Fetch the result into a map where the key is SHOP_SUBSCRIPTION.ADMIN_TOOL_FEATURE_TYPE_ID
.fetchMap(SHOP_SUBSCRIPTION.ADMIN_TOOL_FEATURE_TYPE_ID);
this.ctx.select(
shopSubscription.field(SHOP\u SUBSCRIPTION.SHOP\u ID),
shopSubscription.field(SHOP_SUBSCRIPTION.PAYMENT_GATEWAY_SUBSCRIPTION_ID),
shopSubscription.field(SHOP\u SUBSCRIPTION.ADMIN\u TOOL\u FEATURE\u TYPE\u ID),
支付\网关\订阅。订阅\标识\令牌
)
.发件人(支付\网关\订阅)
.加入(网上订购)
.on(支付网关订阅.ID.eq(shopSubscription.field(商店订阅.支付网关订阅.ID))
.和(支付\网关\订阅。支付\网关\类型\ ID.eq(支付网关类型)))
//对每个记录应用map()函数
.map(new RecordMapper因为有很多不同的fetchMap()
实现,我没有看到有fetchMap(Field,RecordMapper),因为有很多不同的fetchMap()
实现,我没有看到fetchMap(Field,RecordMapperjava 8或更高版本
.fetchMap(CN_TASKS.AGENTID,
r -> new CnTaskMessage(r.getValue(CN_TASKS.CN_TASKID), r.getValue(CN_TASKS.TASK_TYPE),
r.getValue(CN_TASKS.STATUS)));
java 8或更高版本
.fetchMap(CN_TASKS.AGENTID,
r -> new CnTaskMessage(r.getValue(CN_TASKS.CN_TASKID), r.getValue(CN_TASKS.TASK_TYPE),
r.getValue(CN_TASKS.STATUS)));
有fetchMap()
重载,这些重载接受RecordMapper
参数,例如,但我不确定这是否是您要查找的参数。您希望如何处理它们?@LukasEder我正在寻找的是一种方法,可以为生成的HashMap
的所有值实现RecordMapper
,以便将所选数据转换为业务s对象。对不起,我仍然不太清楚这意味着什么。你可以用预期的代码/类型等更新你的问题吗?@LukasEder当然:)我添加了一个我认为可能是这样的示例-我希望这有意义^^^啊,好的,我明白了。那么,请随意回答你自己的问题:)有fetchMap()
重载,这些重载接受RecordMapper
参数,例如,但我不确定这是否是您要查找的参数。您希望如何处理它们?@LukasEder我正在寻找的是一种方法,可以为生成的HashMap
的所有值实现RecordMapper
,以便将所选数据转换为业务s对象。对不起,我仍然不太清楚这意味着什么。您是否可以使用预期的代码/类型等更新您的问题?@LukasEder当然:)我添加了一个我认为可能是这样的示例-我希望这有意义^^^啊,好的,我明白了。那么,请随意回答您自己的问题:)