Scala Jooq编写含unnest数组匹配SQL的where条件实现求助
Scala JOOQ 对应WHERE条件实现方案
以下两种写法都可以完美匹配你给出的原生SQL效果:
写法1:直接使用unnest函数拼接
适配你原SQL的写法,和原生SQL结构完全一致:
import org.jooq.impl.DSL.{asterisk, unnest, field, name} // 替换为你自己的数组参数,类型根据字段实际类型调整即可,比如Array[Int]、Array[String] val matchArray: Array[String] = ??? val table = name("table") val queryResult = dslContext .select(asterisk()) .from(table) .where( field(name("value1")).in(unnest(matchArray)), field(name("value2")).in(unnest(matchArray)) ) .fetch()
写法2:使用any运算符兼容特殊方言
如果你的数据库方言对unnest支持不好,可以换用该写法,执行效率和最终效果和写法1完全一致:
import org.jooq.impl.DSL.{asterisk, any, field, name} val matchArray: Array[String] = ??? val table = name("table") val queryResult = dslContext .select(asterisk()) .from(table) .where( field(name("value1")).eq(any(matchArray)), field(name("value2")).eq(any(matchArray)) ) .fetch()
优化建议
如果你已经通过JOOQ代码生成工具生成了对应表的实体类,直接用生成的常量替换上面的field(name("value1"))、name("table")即可,能获得编译期类型检查能力,避免运行时报错。
内容的提问来源于stack exchange,提问作者Abhishek Singh
相关产品推荐
相关产品推荐

