在我們的項目中,我們有一個bean,但我們也想要在那個bean上表達標準的CRUD查詢。我們希望能夠過濾某些領域(範圍,平等,排除等)。現在我們正在考慮使用代表這樣一組過濾器的SearchBean。然而,我們意識到這個搜索bean幾乎和我們的實際Bean相同,我們正在經歷一段艱難的時期,提出一個更優雅的解決方案。什麼是使用Search Bean表達查詢的優雅方式?
解決此問題的好方法是什麼?我們不尋找任何框架特定的解決方案。
在我們的項目中,我們有一個bean,但我們也想要在那個bean上表達標準的CRUD查詢。我們希望能夠過濾某些領域(範圍,平等,排除等)。現在我們正在考慮使用代表這樣一組過濾器的SearchBean。然而,我們意識到這個搜索bean幾乎和我們的實際Bean相同,我們正在經歷一段艱難的時期,提出一個更優雅的解決方案。什麼是使用Search Bean表達查詢的優雅方式?
解決此問題的好方法是什麼?我們不尋找任何框架特定的解決方案。
恐怕這個問題太開放了,給出了很好的答案。這真的取決於你的目標是什麼。此外,你還沒有明確提到你正在使用數據庫(而不是搜索內存),但我假設你是。
你的方法(findEntitiesLikeMe)聽起來像一個不錯的和簡單的方法。
有很多你可以實現的查詢語言(JPQL/SQL等),可以通過清理查詢並將其傳遞到較低層或直接解析查詢來實現。
如果您的服務器結構足夠樹狀,則可以接受XPath並返回與XPath匹配的對象空間。
所有這三種方法都可以給出範圍,均等和排除。我的建議是保持簡單(你聽起來很好),直到它失敗(無論是因爲性能,還是複雜的客戶端API或缺乏靈活性),然後改變爲更好的東西。
最終,一個完整的查詢語言可能會給你最大的靈活性,但可能是最難實現的,特別是如果你解析查詢並且不把它傳遞給下層。
假設您想要在應用程序服務器中處理它。 您可以考慮使用任何 番石榴集合
http://scaramoche.blogspot.com/2010/08/googles-guava-library-tutorial-part-4.html
或 CollectionUtils
從BeanUtils的和BeanPredicate
http://commons.apache.org/beanutils/v1.8.2/apidocs/org/apache/commons/beanutils/BeanPredicate.html
您必須爲您想要支持的過濾器類型實施謂詞類。