jOOQ:重用/复制查询

问题描述 投票:1回答:1

为了避免一遍又一遍地重新创建动态查询的相同部分,我将构建主要部分一次,然后在应用程序的不同部分重用此部分。由于构建查询有一定的参与(请参阅问题jOOQ: best way to get aliased fields (from #as(alias, aliasFunction))的一个方面,为什么会这样),这应该有利于性能......

不幸的是,我必须意识到构建器模式中的不同“步骤”不会返回修改后的副本,而是修改基础状态。因此,我已经找到了一种方法来创建特定“步骤”(例如SelectWhereStep)的不可变副本,从中每次需要时初始化并随后修改(选择)查询。不幸的是,我无法确定实现这一目标的任何(“合法”)方式。

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

java sql performance builder jooq
1个回答
1
投票

不幸的是,我必须意识到构建器模式中的不同“步骤”不会返回修改后的副本,而是修改基础状态

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

目前无法克隆jOOQ查询,这实际上并不是必需的。无论您是使用可变或不可变的API进行操作,实现您想要做的最简洁的方法是以功能方式编写jOOQ查询。即代替

我打算一次构建主要部分,然后在应用程序的不同部分重用该部分

你可以用功能性的方式做同样的事情,而不是强制性的方式。您可以制作一个theMainPart()函数来动态返回该部分,而不是将“主要部分”分配给某个局部变量或全局变量。 More about this in this blog post

© www.soinside.com 2019 - 2024. All rights reserved.