可用版本:Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

TRUE和FALSE条件

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

条件表达式是强制性的,或者当使用动态 SQL时,可能需要提供一个始终评估为 TRUEFALSE 的“虚拟”条件。为此,您可以使用 DSL.trueCondition()DSL.falseCondition()DSL.noCondition()。 例如

TRUE

TRUEAND 布尔运算符的恒等值,可用于将一组值程序或函数式地缩减为条件

TRUE
AND
  ID = 1
AND
  TITLE = 'Animal Farm'
Condition condition = trueCondition();
if (id != null)
    condition = condition.and(BOOK.ID.eq(id));
if (title != null)
    condition = condition.and(BOOK.TITLE.eq(title));

如果方言不支持布尔列类型,则 jOOQ 将简单地生成 1 = 1

FALSE

FALSEOR 布尔运算符的恒等值,可用于将一组值程序或函数式地缩减为条件

FALSE
OR
  ID = 1
OR
  ID = 7
List<Integer> list = List.of(1, 7);
Condition condition = list
    .stream()
    .map(BOOK.ID::eq)
    .reduce(falseCondition(), Condition::or)

如果方言不支持布尔列类型,则 jOOQ 将简单地生成 1 = 0

NO 条件

如果您认为从上述缩减生成的“剩余”恒等值很难看,则可以使用辅助 DSL.noCondition(),它充当 ANDOR 的伪恒等值,不生成任何 SQL,除非缩减产生任何内容(来自空集),在这种情况下,它的行为类似于 TRUE,这通常是您在 WHERE 子句中放置动态条件时所希望的。

如果与实际数据一起使用

ID = 1
OR
  ID = 7
List<Integer> list = List.of(1, 7);
Condition condition = list.stream().map(BOOK.ID::eq)
    .reduce(noCondition(), Condition::or)

如果与空集一起使用

TRUE
 
 
List<Integer> list = List.of(1, 7);
Condition condition = list.stream().map(BOOK.ID::eq)
    .reduce(noCondition(), Condition::or)

有关 noCondition() 和相关主题的一些其他信息可以在关于动态 SQL的部分中找到。

反馈

您对此页面有任何反馈吗? 我们很乐意听取您的意见!

The jOOQ Logo