gpt4 book ai didi

java - jOOQ:重用/复制查询

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

为了避免一遍又一遍地重新创建动态查询的同一部分,我打算构建一次主要部分,然后在应用程序的不同部分中重用该部分。由于构建查询有些复杂(请参阅问题 jOOQ: best way to get aliased fields (from #as(alias, aliasFunction)) 以了解为什么会出现这种情况的一方面),这应该有利于性能......

不幸的是,我不得不意识到构建器模式中的不同“步骤”不会返回修改后的副本,而是会修改底层状态。因此,我寻找一种方法来创建特定“步骤”(例如 SelectWhereStep)的不可变副本,以便在每次需要时初始化并随后修改(Select-)查询。不幸的是,我无法找到任何(“合法”)方法来实现这一目标。

可以吗?如果没有,最好的选择是什么?

最佳答案

Unfortunately, I've had to realize that the different "steps" in the builder pattern don't return amended copies, but modify underlying state

这确实是jOOQ DSL / model APIs当前设计中的一个非常不幸的限制。 。 DSL API应该是不可变的,而模型 API 是可变的。但正如您所注意到的,情况并非总是如此。

目前还没有办法克隆 jOOQ 查询,因为大多数情况下,这并不是真正必要的。无论您使用的是可变还是不可变的 API,实现您想要做的事情的最干净的方法是以函数方式编写 jOOQ 查询。 IE。而不是

I was going to build the main part once and then reuse this part in different parts of the application

您可以以函数式方式而不是命令式方式做同样的事情。您可以创建一个动态返回该部分的 theMainPart() 函数,而不是将“主要部分”分配给某个局部或全局变量。 More about this in this blog post .

As a side-note, when writing dynamic SQL, there are usually better ways than referencing the XYZStep types directly .

关于java - jOOQ:重用/复制查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55197331/

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