我正在评估在我们的解决方案中使用 JOOQ,其中我们使用 REST API 公开数据,并检查以下功能是否可以使用 jooq 的 seekAfter
和 seekBefore
API。
假设我有一张像
这样的 tableCREATE TABLE Test (
Id Int NOT NULL PRIMARY KEY,
Sid varchar(34) NOT NULL,
....
)
我们希望使用 Id 字段进行分页,但不想将其暴露给用户。作为响应的一部分,我们将下一个和上一个分页参数作为 token 分发。
目前我们正在构建类似的查询
SELECT ... FROM Test WHERE Id > (SELECT Id FROM Test WHERE Sid=?) LIMIT 10;
是否可以给它一个表达式到jooq的seek api而不是文字值?
最佳答案
你可以这样做:
// Assuming this static import:
import static org.jooq.impl.DSL.*;
DSL.using(configuration)
.select()
.from(TEST)
.orderBy(TEST.ID)
.seekAfter(field(select(TEST.ID).from(TEST).where(TEST.SID.eq(sid))))
.limit(10)
.fetch();
本质上,这是包装 Select<? extends Record1<T>>
输入 Field<T>
输入 DSL.field(Select)
关于java - 在jooq的seek api中使用子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43689287/