You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JOOQ的IN子句中使用Postgres的VALUES函数优化大参数查询

解决方案

完全可以实现,jOOQ原生支持构造PostgreSQL风格的VALUES列表IN查询,无需修改现有数据模型,具体实现方式如下:

首先引入jOOQ DSL的静态导入:

import static org.jooq.impl.DSL.*;

假设你要传入的page值列表为List<Integer> pageIdList,查询条件的构造写法如下:

// 假设ENTITY是jOOQ生成的对应表实例,PAGE是表中的page字段
dslContext.selectFrom(ENTITY)
    .where(ENTITY.PAGE.in(
        values(
            pageIdList.stream()
                .map(DSL::row)
                .toArray(RowN[]::new)
        )
    ))
    .fetch();

以上代码生成的原生SQL就和你预期的写法完全一致:

WHERE "entity"."page" IN (VALUES (1), (2), (3), (4), (5), ...)

注意事项

  • 如果遇到PostgreSQL类型推断报错的情况,可以给每行值显式指定类型,修改stream映射逻辑即可:
    .map(id -> row(id).cast(ENTITY.PAGE.getDataType()))
    
  • 所有参数都会以预编译绑定参数的形式传入,不会硬编码到SQL中,不存在SQL注入风险,性能和你手写原生SQL完全一致。

内容的提问来源于stack exchange,提问作者jch-me

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 16:27:04