有条件地使用jooq准备语句中的Include子句

时间:2018-05-10 11:02:00

标签: java sql jooq

您好我正在使用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语句,一个没有。提前谢谢。

1 个答案:

答案 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"));
}

编辑:经过测试的代码。