2012-09-05 50 views
0

我遇到問題。構建條件SQL語句的設計模式

我有SQL,我需要追加不同類型的「限制」,甚至做一個連接。這取決於用戶的搜索條件。

該SQL將涉及不同的表,因爲它可以搜索一對多關係,因此休眠ORM不能支持我的要求。

我可以知道是否有設計模式可以幫助構建這樣的SQL語句嗎?

+1

發佈您的SQL查詢並將Hibernate標籤添加到您的問題中,以便我們可以幫助您使用Criteria API – kothvandir

回答

0

適合代表語言陳述問題的設計模式是Interpreter pattern。但在開始編寫SQL解析器之前,請查看ANTLR。 而且更重要的是,問自己兩個問題:

  1. 是不同的SQL的數量證明發展的一般SQL的努力解釋的解決方案,而不是編程(只是if-else語句)我的5-10不同的查詢?
  2. 我是否詳細審閱了Hibernate參考手冊?
+0

我是否詳細審閱了Hibernate參考手冊? - >是的,我花了1個月的時間,並一直支持Hibernate,但遺憾的是它不能滿足大數據集的需求。子查詢IN對於數百萬行數據非常有效。 – seesee

+0

不同的SQL的數量是否證明開發一個通用的SQL解釋器解決方案而不是編程(只是if-else語句)我的5-10個不同的查詢的努力是正確的? - >我不想解釋SQL語​​句。當我想改變時,我只想讓它更「模塊化」。我討厭一系列IF-ELSE語句。 – seesee

0

我完全有一個類似的要求,我有一個上下文無關的語言來定義搜索條件,解析爲中的ParseEntry對象,類似於Restrictions。如果需要爲單個實體生成標準,我使用SQLQueryGeneratorVisitor訪問解析表並生成SQL查詢,類似於HibernateCriteriaGeneratorVisitor。所以,我基本上使用了Visitor模式,使得分析樹和條目可見,以便可以生成不同類型的條件(SQL/Hibernate或將來的其他內容)。

+0

感謝您的回覆,但我有點困惑..請問您能提供一些示例嗎? – seesee