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

可选的条件表达式

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

创建动态 SQL 查询的一个关键能力是能够提供可选的条件表达式

boolean condition = ...

create.select(BOOK.ID)
      .from(BOOK)
      .where(condition ? BOOK.ID.eq(10) : noCondition())
      .fetch();

上述查询产生

-- If condition is true
SELECT book.id FROM book WHERE book.id = 10

-- If condition is false
SELECT book.id FROM book

noCondition() 表达式将被忽略。如果这意味着该子句为空,则整个子句将被省略。这不适用于投影 Record 类型的子句,包括SELECT 子句行值表达式,或嵌套记录,以及函数调用,在这种情况下,将投影一个 NULL 值。

关于 noCondition() 的一些额外交互可以在TRUE 和 FALSE 条件一节中看到。

使用 noCondition() 作为列表达式,例如,通过使用 DSL.field(noCondition()) 包装它,将产生一个 DSL.noField(BOOLEAN)

noCondition() 表达式仅在 DSL API 中支持,而不在 模型 API 中支持,在模型 API 中,noCondition() 的行为是未定义的。

反馈

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

The jOOQ Logo