gpt4 book ai didi

jOOQ Query OrderBy as String

转载 作者:行者123 更新时间:2023-12-04 15:42:06 25 4
gpt4 key购买 nike

我从应用程序配置中以字符串形式获取 order by 子句。

例子

String orderByString = "NAME DESC, NUMBER ASC";

现在我想在 jOOQ 查询中使用这个顺序:
Result<KampagneRecord> records = repository.dsl()
.selectFrom(KAMPAGNE)
.orderBy(orderByString)
.fetch();

不幸的是 orderBy 不接受字符串。

有没有办法将 order by 子句添加到查询中?

最佳答案

您可以使用 jOOQ 不验证您的 plain SQL templating 的事实。 ,然后将您的字符串包裹在 DSL.field(String) 中:

Result<KampagneRecord> records = repository.dsl()
.selectFrom(KAMPAGNE)
.orderBy(field(orderByString))
.fetch();

当然,您必须确保语法正确性得到保证,并防止 SQL 注入(inject)。

一些依赖 jOOQ 的边缘情况能够转换您的 SQL ORDER BY子句可能会停止工作,但在您的简单查询示例中,这不适用。

在非常简单的情况下,另一种解决方案是预处理您的字符串。似乎这会起作用:

String orderByString = "NAME DESC, NUMBER ASC";

List<SortField<?>> list =
Stream.of(orderByString.split(","))
.map(String::trim)
.map(s -> s.split(" +"))
.map(s -> {
Field<?> field = field(s[0]);
return s.length == 1
? field.sortDefault()
: field.sort("DESC".equalsIgnoreCase(s[1])
? SortOrder.DESC
: SortOrder.ASC
);
})
.collect(Collectors.toList());

System.out.println(list);

现在可以将此列表传递给 orderBy()条款。

关于jOOQ Query OrderBy as String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57506855/

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