在 jooq seek 中使用子查询 api

using sub-query in jooq's seek api

我正在评估在我们的解决方案中使用 JOOQ,我们使用 REST API 公开数据并检查以下功能是否可以使用 jooq 的 seekAfterseekBefore api。

假设我有一个像

这样的 table
CREATE TABLE Test (
  Id Int NOT NULL PRIMARY KEY,
  Sid varchar(34) NOT NULL,
  ....
)

我们想使用 Id 字段进行分页,但不想将其暴露给用户。作为响应的一部分,我们将下一个和上一个分页参数作为标记分发。

目前我们正在构建类似

的查询
SELECT ... FROM Test WHERE Id > (SELECT Id FROM Test WHERE Sid=?) LIMIT 10;

是否可以给它一个 jooq 的搜索表达式 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();

本质上,这是用 DSL.field(Select)

Select<? extends Record1<T>> 类型包装在 Field<T> 类型中