DSL.param()
创建一个绑定变量,该绑定变量的生成方式?
与sql一样,或者:bizdate
您选择使用命名参数,或者'20190801'
选择内联绑定变量。有关绑定变量的更多信息,请参见此处。
您不能用于DSL.param()
生成列引用或关键字。jOOQ表达式树中按Field
类型描述了列表达式(例如,引用)。关键字是按Keyword
类型描述的,但是您可能不想降低这个级别。相反,您想处理查询表达式中的某些逻辑。例如:
String sortField = "id";
SortOrder sortOrder = SortOrder.ASC;
Query query = context.select()
.from("table1")
.where(DSL.field("report_date").eq(DSL.param("bizdate")))
.orderBy(DSL.field(sortField).sort(sortOrder));
您犯的错误是认为您可以对各种不同的动态SQL查询使用单个sql模板,但是如果要动态添加另一个谓词呢?还是另一个加入?还是另一列?无论如何,您都必须构建一个不同的jOOQ表达式树。就像这里。您可以存储两个sql字符串(每个排序顺序一个),并为每个排序列重复该字符串。
但是,建议您提取一个采用输入参数并每次重新生成查询的函数,而不是预先生成单个sql字符串,例如:
ResultQuery<?> query(String bizDate, Field<?> sortField, SortOrder sortOrder) {
return context.selectFrom("table1")
.where(field("report_date").eq(bizDate))
.orderBy(sortField.sort(sortOrder));
}
以下是有关将jOOQ用于动态sql的更多信息: