Kotlin 如何在存储库方法中重用/组合JOOQ查询的一部分?
使用JOOQ DSLContext变量ctx,我有一个选择所有关系数据的方法Kotlin 如何在存储库方法中重用/组合JOOQ查询的一部分?,kotlin,jooq,Kotlin,Jooq,使用JOOQ DSLContext变量ctx,我有一个选择所有关系数据的方法 open fun selectAllSomethings(id: String): List<SomeDto> = ctx .select(..), .from(..) .join(..) .leftJoin(...) .fetch() .map() 是否有必要将其分为两种不同的方法?或者需要添加一个if?这个答案在语法上并不完美-没有生成的模型,也不知
open fun selectAllSomethings(id: String): List<SomeDto> = ctx
.select(..),
.from(..)
.join(..)
.leftJoin(...)
.fetch()
.map()
是否有必要将其分为两种不同的方法?或者需要添加一个if?这个答案在语法上并不完美-没有生成的模型,也不知道完整的类型,我只能显示一个粗略的示例。解决方案基本上是由其他两种方法使用的共享方法:
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,这样更明显的是,它是一个只在上下文(即事务)中使用的函数,也是一个私有函数,使其真正内部化。您可以很容易地将其更改为在上下文中作为参数传递。下面的答案基于假设,因为显示的工作代码很少,或者您以前尝试过的内容很少,我添加了一个假设,即使用的是JOOQ库。有趣的方法!这允许基于jOOQ的全新迷你SQL语言扩展。次要的挑剔:我会返回一个ResultQuery类型,除非非常清楚SelectOnConditionStep是一个理想的返回类型,即允许调用站点修改最后一个leftJoin谓词。Lukas为了提示,我让类型推断选择返回类型,这太具体了,所以我按照建议更新了ResultQuery,谢谢!
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(...)
}