可选的列表达式
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
创建动态 SQL 查询的一个关键能力是能够提供可选的列表达式。例如,假设您有一个条件,根据该条件您想要添加一个 ORDER BY 子句和一个 LIMIT 子句。您可以使用 DSL.noField()
来实现。
boolean condition = ... create.select(BOOK.ID) .from(BOOK) .orderBy(condition ? BOOK.ID : noField()) .limit(condition ? val(10) : noField(INTEGER)) .fetch();
上述查询产生
-- If condition is true SELECT book.id FROM book ORDER BY book.id LIMIT 10 -- If condition is false SELECT book.id FROM book
在不投影列的子句中,noField()
表达式将被忽略。如果这意味着子句为空,那么整个子句将被省略。这不适用于投影 Record
类型的子句,包括 SELECT 子句,行值表达式,或嵌套记录,以及函数调用,在这种情况下将投影 NULL
值。
使用 noField()
作为条件表达式,例如通过使用 DSL.condition(noField())
包装它将产生一个 DSL.noCondition()。
noField()
表达式仅在 DSL API 中受支持,而不在 模型 API 中受支持,在模型 API 中noField()
的行为未定义。
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!