gpt4 book ai didi

java - 在jOOq中,为什么连接和语句构造是高耦合的?

转载 作者:行者123 更新时间:2023-11-30 08:52:21 26 4
gpt4 key购买 nike

假设我有一个查询生成器

ResultQuery query = DSL.select().from(TABLE);

和一个连接/上下文池

DSLContext ctx = DSL.using(conn, SQLDialect.MYSQL)

我希望能够:

  • 为不同的连接/上下文重用相同的查询对象
  • 如果无法使用相同的查询实例,则使用查询作为模板
  • 在查询执行过程之外执行查询构建任务

由于 jOOQ 中的查询对象具有连接的配置:

这是否意味着查询应该只在 Activity 的连接上下文中构建?

免责声明:我使用 jOOQ 已经有几周了,也许我只是缺少一些文档。


例如,下一个代码不是线程安全的,除非它通过查询同步,否则它不会安全。

ctx.fetch(query).map(mapper);

源 DefaultDSLContext.fetch at 2157 version 3.5.3

public <R extends Record> Result<R> fetch(ResultQuery<R> query) {
final Configuration previous = Utils.getConfiguration(query);

try {
query.attach(configuration());
return query.fetch();
}
finally {
query.attach(previous);
}
}

最佳答案

reuse the same query object for different connection/context

你不应该用 jOOQ 3.x 这样做。为什么(某些)jOOQ QueryParts 是可变的有多种历史原因。这将在 jOOQ 4.0 中改变——希望如此。背景信息在这里:

if the same query instance can't be use, use the query as a template

你总是可以做的是实现 AST 构造函数,即时生成新的 QueryParts,例如:

public static Condition template(...) {
Condition result = DSL.trueCondition();

if (...)
result = result.and(...);

return result;
}

这显然也适用于完整的查询。

关于java - 在jOOq中,为什么连接和语句构造是高耦合的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30196362/

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