gpt4 book ai didi

java - 如何使用 jOOQ 修改纯 sql 文本,例如附加 order-by/limit-offset 子句或更改 where 条件值?

转载 作者:行者123 更新时间:2023-12-02 09:34:57 25 4
gpt4 key购买 nike

我使用 jOOQ 3.11.11 构建了一个带有命名参数的 SQL 模板。

select * from table1 where report_date = :bizdate

然后我存储了sql模板文本。对于每个查询,我将用用户输入替换参数 bizdate
how to generate sql from template and param placeholder with JOOQ?
实时sql如下:

select * from table1 where report_date = '20190801'

效果很好。但还有一个问题。我想在 sql 中附加一个 order-by 子句和一个 limit-offset 子句。按字段的顺序是动态的,由用户输入以及限制偏移参数决定。实时sql是这样的:

select * from table1 where report_date = '20190801' order by id desc limit 0,10

select * from table1 where report_date = '20190801' order by name asc limit 5,20

如何使用jOOQ从模板和实时输入生成sql?

最佳答案

the answer 所示到other question我认为最好不要基于 SQL 字符串运行动态 SQL 查询,而是每次使用 jOOQ API 构建一个新查询。然后添加 LIMIT 子句也很简单:

ResultQuery<?> query(String bizDate, Field<?> sortField, SortOrder sortOrder, int limitOffset, int limitRows) {
return context.selectFrom("table1")
.where(field("report_date").eq(bizDate))
.orderBy(sortField.sort(sortOrder)
.limit(limitOffset, limitRows));
}

如果您确实使用 SQL 字符串,则可以再次使用与以前相同的模式:

    ResultQuery resultQuery = context.resultQuery(
sqlTemp,
DSL.param("bizdate", "20190801"),
DSL.field(sortField).sort(sortOrder),
DSL.param("limit", limitOffset),
DSL.param("rows", limitRows));

作为另一种选择,您也可以使用 Java 序列化 serialize your query而不是将其存储为纯字符串。

关于java - 如何使用 jOOQ 修改纯 sql 文本,例如附加 order-by/limit-offset 子句或更改 where 条件值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57601416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com