在 jooq 中,如果不知道前面是否有 "where",如何添加 "and" 条件?

In jooq, how do I add an "and" condition when don't know whether there is a "where" prior to it or not?

我有以下 Jooq 代码:

if (...) {
    query = query.where(...);
}

query = query.and(...);

问题是不知道会不会加where()语句

如果不是,and()部分会在没有事先where()的情况下添加,这应该是错误的。

我想知道如何解决这个问题。

一定要这样写吗?

if (...) {
    query = query.where(...);
}
else {
    query = query.where(true);    // This will make sure there is always a where statement, but it looks hacky...
}

query = query.and(...);

或者,我必须调整语句的顺序吗?

如果我想保留订单怎么办?

谢谢!

不要创建动态查询。创造动态条件。

一如既往,假设此静态导入:

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

命令式[​​=36=]

Condition condition = noCondition();

// And then
if (something1)
    condition = condition.and(c1);

if (something2)
    condition = condition.and(c2);

ctx.select(...)
   .from(...)
   .where(condition)
   .fetch();

表达方式

ctx.select(...)
   .from(...)
   .where(something1 ? c1 : noCondition())
   .and(something2 ? c2 : noCondition())

函数式

ctx.select(...)
   .from(...)
   .where(Stream
       .of(1, 2, 3)
       .map(BOOK.ID::eq)
       .reduce(noCondition(), Condition::or))
   .fetch();

可能还有很多其他款式。另请参阅: