在 jooq seek 中使用子查询 api
using sub-query in jooq's seek api
我正在评估在我们的解决方案中使用 JOOQ,我们使用 REST API 公开数据并检查以下功能是否可以使用 jooq 的 seekAfter
和 seekBefore
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>
类型中
我正在评估在我们的解决方案中使用 JOOQ,我们使用 REST API 公开数据并检查以下功能是否可以使用 jooq 的 seekAfter
和 seekBefore
api。
假设我有一个像
这样的 tableCREATE 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>
类型中