JOOQ selectQuery for Record5
JOOQ selectQuery for Record5
我是 JOOQ 的新手。
我需要使用 SelectQuery 和 return 结果,但 return 类型是记录。是否可以将 selectQuery 与 Record5 一起使用?或者有其他解决方案吗?
SelectQuery<Record> query = db.selectQuery();
query.addSelect(WARE.NAME, RECEIPTITEM.SALEPRICE, RECEIPTITEM.QUANTITY, RECEIPT.TSCCREATED, WARE.WARECATEGORYID);
query.addFrom(RECEIPT
.join(RECEIPTITEM).on(RECEIPT.ID.eq(RECEIPTITEM.RECEIPTID))
.join(OUTLET).on(OUTLET.ID.eq(RECEIPT.OUTLETID))
.join(WARE).on(WARE.ID.eq(RECEIPTITEM.WAREID)));
query.addConditions(RECEIPT.TSCCREATED.between(start, end)
.and(OUTLET.OWNERID.eq(ownerId)));
if (outletId != null) {
query.addConditions(RECEIPT.OUTLETID.eq(outletId));
}
if (merchantId != null) {
query.addConditions(RECEIPT.MERCHID.eq(merchantId));
}
您不能使用 jOOQ 创建 SelectQuery<Record5<...>>
类型。
原因是 SelectQuery
(which is part of the model API) allows you to keep adding new columns to it via SelectQuery.addSelect()
(您自己完成)。每次这样的调用都会使 Record5<...>
类型无效。
但是,如果动态部分只是附加条件,则不必使用模型 API 来构造动态 SQL。您可以像这样重写您的查询:
Condition condition = RECEIPT.TSCCREATED.between(start, end)
.and(OUTLET.OWNERID.eq(ownerId));
if (outletId != null) {
condition = condition.and(RECEIPT.OUTLETID.eq(outletId));
}
if (merchantId != null) {
condition = condition.and(RECEIPT.MERCHID.eq(merchantId));
}
Select<Record5<String, BigDecimal, Integer, Timestamp, Long>> select =
db.select(
WARE.NAME,
RECEIPTITEM.SALEPRICE,
RECEIPTITEM.QUANTITY,
RECEIPT.TSCCREATED,
WARE.WARECATEGORYID)
.from(RECEIPT
.join(RECEIPTITEM).on(RECEIPT.ID.eq(RECEIPTITEM.RECEIPTID))
.join(OUTLET).on(OUTLET.ID.eq(RECEIPT.OUTLETID))
.join(WARE).on(WARE.ID.eq(RECEIPTITEM.WAREID)))
.where(condition);
我是 JOOQ 的新手。
我需要使用 SelectQuery 和 return 结果,但 return 类型是记录。是否可以将 selectQuery 与 Record5 一起使用?或者有其他解决方案吗?
SelectQuery<Record> query = db.selectQuery();
query.addSelect(WARE.NAME, RECEIPTITEM.SALEPRICE, RECEIPTITEM.QUANTITY, RECEIPT.TSCCREATED, WARE.WARECATEGORYID);
query.addFrom(RECEIPT
.join(RECEIPTITEM).on(RECEIPT.ID.eq(RECEIPTITEM.RECEIPTID))
.join(OUTLET).on(OUTLET.ID.eq(RECEIPT.OUTLETID))
.join(WARE).on(WARE.ID.eq(RECEIPTITEM.WAREID)));
query.addConditions(RECEIPT.TSCCREATED.between(start, end)
.and(OUTLET.OWNERID.eq(ownerId)));
if (outletId != null) {
query.addConditions(RECEIPT.OUTLETID.eq(outletId));
}
if (merchantId != null) {
query.addConditions(RECEIPT.MERCHID.eq(merchantId));
}
您不能使用 jOOQ 创建 SelectQuery<Record5<...>>
类型。
原因是 SelectQuery
(which is part of the model API) allows you to keep adding new columns to it via SelectQuery.addSelect()
(您自己完成)。每次这样的调用都会使 Record5<...>
类型无效。
但是,如果动态部分只是附加条件,则不必使用模型 API 来构造动态 SQL。您可以像这样重写您的查询:
Condition condition = RECEIPT.TSCCREATED.between(start, end)
.and(OUTLET.OWNERID.eq(ownerId));
if (outletId != null) {
condition = condition.and(RECEIPT.OUTLETID.eq(outletId));
}
if (merchantId != null) {
condition = condition.and(RECEIPT.MERCHID.eq(merchantId));
}
Select<Record5<String, BigDecimal, Integer, Timestamp, Long>> select =
db.select(
WARE.NAME,
RECEIPTITEM.SALEPRICE,
RECEIPTITEM.QUANTITY,
RECEIPT.TSCCREATED,
WARE.WARECATEGORYID)
.from(RECEIPT
.join(RECEIPTITEM).on(RECEIPT.ID.eq(RECEIPTITEM.RECEIPTID))
.join(OUTLET).on(OUTLET.ID.eq(RECEIPT.OUTLETID))
.join(WARE).on(WARE.ID.eq(RECEIPTITEM.WAREID)))
.where(condition);