1
我有以下情況:從SelectQuery(或等價物)中提取查詢部分?
類A extends B
。其他類,如C
,D
等也擴展B
在類B
,我想關於A
,C
和D
共同的一般信息的邏輯。
因此,我想在B
檢索所有的一般信息一般查詢,也可以通過一個Query
到B
以便正確join
S和condition
s的滿足。基本上:
public B getB(String bUuid, Query extendedQuery) {
SelectQuery bQuery = ... dsl.select(/* general B columns */)
.select(/* SELECT part from extended query */)
.from(/* general B tables */)
.from(/* FROM part from extended query */) // maybe join with some if else logic instead
.where(/* general B conditions */)
.where(/* WHERE part of extended query */)
這可能使用JOOQ?除非絕對必要,否則我真的不想使用純SQL執行。
編輯:
使用下面的答案,這是最後的代碼我有,我相當滿意:
public Record getB(String bUuid, Consumer<SelectQuery> extender)
我稱之爲如下:
Record r = B.getB(uuid, query -> {
query.addSelect(...);
query.addJoin(...);
}
而在getB中,在使我們的「general」SelectQuery query
後,我們只需調用:
extender.apply(query);
之後我們可以簡單地用我們的增強型查詢做query.fetchOne()
。
非常感謝您的回覆埃德爾先生!以您的建議爲基礎,我將上面編輯的解決方案帶入了我的問題。我也非常感謝您花時間回答SO的問題。 :) – user991710
@ user991710:不客氣!哦,有趣的方法,使用消費者。注意:你也可以在Stack Overflow上回答你自己的問題。這將使它成爲未來訪客更有趣的問題 –