jOOQ:在 select 语句之前设置 where 条件

jOOQ: set where condition before the select statement

我有这个 jOOQ select 根据参数值,where 条件应该等于或不等于一个值:

如果参数 = true:

    Charts c = CHARTS.as("c");
    context.select()
                .from(c)
                .where(c.CHART_TYPE.eq(100))  // note the eq
                .orderBy(c.NAME)
                .fetch();

如果参数 = false:

    Charts c = CHARTS.as("c");
    context.select()
                .from(c)
                .where(c.CHART_TYPE.ne(100))  // note the ne
                .orderBy(c.NAME)
                .fetch();

我不想重复整个 select(在许多情况下 complex/longer 比示例更多)。有没有办法只根据参数设置 where 条件,然后将其插入 select?

是的,这不是问题,您可以创建一个 returns 条件对象的方法。

例如

Charts c = CHARTS.as("c");
context.select()
            .from(c)
            .where(createCondtion(c))  
            .orderBy(c.NAME)
            .fetch();

private Condition createCondition(Charts c) {
   if (parameter == false) {
      return c.CHART_TYPE.ne(100);
   } else {
      return c.CHART_TYPE.eq(100);
   }
}

您可以使用 Field.compare(Comparator, T)

context.select()
       .from(c)
       .where(c.CHART_TYPE.compare(parameter ? Comparator.EQ : Comparator.NE, 100))
       .orderBy(c.NAME)
       .fetch();