使用JOOQ DSLContext
变量ctx
我有一种选择所有关系数据的方法。
open fun selectAllSomethings(id: String): List<SomeDto> = ctx
.select(..),
.from(..)
.join(..)
.leftJoin(...)
.fetch()
.map()
我需要使用add
方法重用此逻辑,对于具体的id
,我想更改代码以使用fetchOne
和map
。如何重用查询的第一部分并在两种方法之间共享?这部分:
ctx.select(..),
.from(..)
.join(..)
.leftJoin(...)
是否有必要将其分为两种不同的方法?或者需要添加if
?
答案 0 :(得分:3)
这个答案在语法上并不完美 - 没有你生成的模型,也不知道我只能展示粗略样本的完整类型。该解决方案基本上是另外两种方法使用的共享方法:
private fun DSLContext.baseThingQuery(id: String): ResultQuery<Record> {
return select(...)
.from(...)
.join(...).on(...)
.leftJoin(...).on(...)
}
fun fetchAllThings(id: String): List<ThingDto> {
return ctx.baseThingQuery(id).fetch(...).map(...)
}
fun doSomethignWithOneThing(id: String): ThingDto {
return ctx.baseThingQuery(id).fetchOne(...).map(...)
}
注意: 我使共享实用程序函数扩展了DSLContext
,以便更明显的是它只是作为一个函数才能在上下文中使用(即交易)以及private
使其真正内部化。您可以轻松地将其更改为在上下文中作为参数传递。