栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用jOOQ从模板按参数生成SQL?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用jOOQ从模板按参数生成SQL?

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的更多信息:

  • https://www.jooq.org/doc/latest/manual/sql-building/dynamic-sql
  • https://blog.jooq.org/2017/01/16/a-functional-programming-approach-to-dynamic-sql-with-jooq


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/414277.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号