在 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();
可能还有很多其他款式。另请参阅:
我有以下 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();
可能还有很多其他款式。另请参阅: