您好我正在使用JOOQ在我的java应用程序中构建一个SQL语句。我需要在一定条件下在声明中包含一个或一个条款,而在另一个条件下省略。 e.g。
org.jooq.Query ps = select(field("q.*"))
.from(table("QUEUES q"))
.where(field("q.APPLICATION").eq("APP1"));
然后,我需要根据其他变量取消查询的一部分或部分..
org.jooq.Query ps = select(field("q.*"))
.from(table("QUEUES q"))
.where(field("q.APPLICATION").eq("APP1"))
.or(field("q.APPLICATION").eq("APP2"));
我无法在没有两个单独的陈述的情况下弄清楚如何做到这一点,一个包括or语句,一个没有。提前谢谢。
答案 0 :(得分:1)
您要做的是使用SelectConditionStep
的扩展名,这些扩展名允许您将查询分解为单个步骤,并使用标记作为仅附加SelectConditionStep
的一个特定扩展名的方法查询。
根据您的查询和一个标记(boolean
- 分隔要使用的SelectConditionStep
的扩展名),例如checkBothApps
。
boolean checkBothApps = false;
org.jooq.SelectJoinStep<R> joinStep = select(field("q.*"))
.from(table("QUEUES q"));
org.jooq.SelectConditionStep<R> conditionStep = joinStep.where(field("q.APPLICATION").eq("APP1"));
if (checkBothApps) {
// This condition will be added to the join step.
joinStep.or(field("q.APPLICATION").eq("APP2"));
}
编辑:经过测试的代码。