簡體   English   中英

jOOQ:重用/復制查詢

[英]jOOQ: reusing / copying queries

為了避免一遍又一遍地重新創建動態查詢的同一部分,我將構建一次主要部分,然后在應用程序的不同部分重用這部分。 由於構建查詢有點涉及(請參閱問題jOOQ: best way to get aliased fields (from #as(alias, aliasFunction))的一個方面),這應該有利於性能...

不幸的是,我不得不意識到構建器模式中的不同“步驟”不會返回修改后的副本,而是修改底層狀態。 因此,我一直在尋找一種方法來創建特定“步驟”(例如SelectWhereStep )的不可變副本,每次我需要它時都會從中初始化並隨后修改(Select-)查詢。 不幸的是,我無法確定實現這一目標的任何(“合法”)方式。

可以做到嗎? 如果沒有,最好的選擇是什么?

不幸的是,我不得不意識到構建器模式中的不同“步驟”不返回修改后的副本,而是修改底層狀態

這確實是jOOQ DSL/模型 API當前設計中的一個非常不幸的限制。 DSL API應該是不可變的,而模型 API 是可變的。 但正如您所注意到的,情況並非總是如此。

目前沒有辦法像大多數人那樣克隆 jOOQ 查詢,這並不是真正必要的。 無論您使用的是可變 API 還是不可變 API,實現您想要做的事情的最簡潔方法是以函數方式編寫 jOOQ 查詢。 即代替

我打算構建一次主要部分,然后在應用程序的不同部分重用這部分

你可以用函數式的方式而不是命令式的方式來做同樣的事情。 與其將“主要部分”分配給某個局部或全局變量,您還可以創建一個theMainPart()函數來即時返回該部分。 在這篇博文中詳細介紹了這一點

附帶說明一下,在編寫動態 SQL 時,通常有比直接引用XYZStep類型更好的方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM