如何使用jooq编写具有多个字段的条件

时间:2013-05-28 09:31:12

标签: java sql jooq row-value-expression

我想用JOOQ

写一个类似下面的条件
AND (id,name) IN (('id1','name1'),('id2','name2'),...)

我尝试了这种语法

Condition condition= DSL.concat(idField,nameField).in("");

生成

concat(cast(`id` as char), cast(`name` as char)) in ('id1name1',"id2name2",....))

但是这个解决方案通过跳过索引导致了巨大的性能问题

我不知道如何将两个领域放在一起

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

不要使用字符串连接,实际上你想使用行值表达式谓词!使用jOOQ的行值表达式支持,如下所示: http://www.jooq.org/doc/3.0/manual/sql-building/column-expressions/row-value-expressions

或更具体地说:

// import static org.jooq.impl.DSL.row;
Condition condition = row(ID, NAME).in(row("id1", "name1"), row("id2", "name2"));

由于Row2.in(Row2...)

中的通用varargs参数,您可能需要取消警告

如果目标数据库不支持行值表达式,则jOOQ会将上述内容扩展为此谓词

(ID = 'id1' AND NAME = 'name1') OR (ID = 'id2' AND NAME = 'name2')