2011-09-21 51 views
2

我面臨着以下設計問題:iBatis是動態SQL查詢的正確選擇嗎?

  • 將有幾個準備SQL語句在WHERE子句中包含定義的約束上,其中的值將是動態的,根據用戶的輸入。
  • 此外,還會有一些SQL語句需要,可能會非常複雜,但是由此產生的SELECT子句)仍然非常簡單。

據我所知,iBatis將符合這些要求。

  • 現在是什麼在這樣一個場景,用戶(通過用戶界面)會影響到完整的查詢建設情況,使得在臨時基礎上查詢?

已準備語句不能做到這一點作爲整個WHERE子句是動態的,我們甚至可能聚集的條款,甚至內置到SQL函數子選擇。

考慮到所有這些,你會繼續使用iBatis還是進行一些其他自定義開發,作爲滿足上述要求的最佳體系結構?

+0

考慮myBatis。它是iBatis的更新版本。 iBatis的開發已經停止(我相信)。在某些時候(出於我不知道的原因),該項目從Apache遷移到Google,名稱被更改爲myBatis。 – DwB

+0

對不起 - 當然我的意思是myBatis ... –

回答

3

最新版本的iBatis(MyBatis)允許我們使用強大的基於OGNL的表達式來構建動態查詢。動態SQL功能是iBATIS最強大的功能之一。

1

我會爲iBatis投票。如果你有複雜的SQL查詢被執行(尤其是一些JOIN和SUB-SELECT),結果產生一個簡單的結果集,我總是發現它最好。

當您使用iBatis時,您可以更多地控制SQL,並且還可以幫助您與現有/遺留數據庫集成。

2

iBatis會在這種情況下工作。我們使用iBatis創建的完全相同的場景,根據用戶從UI中的選擇,創建動態的即席查詢。這種複雜性是隨着可用頁面間數量的增加而增加的,但它是可行的。

Hibernate是一個功能齊全的ORM,它是另一個明顯的選擇,但它使用起來更復雜。這裏有一些鏈接,可以幫助:

Dynamic Queries with Hibernate

StackOverflow question on Dynamic Queries with Hibernate

所以我會去的iBatis作爲第一選擇,或休眠作爲解決方案。我認爲,除非您真正考慮通過整個設計,否則定製解決方案很容易變成複雜的嵌套代碼。當然,假設這些要求不會隨着你的需要而改變。

我覺得iBatis可以讓你在努力中更好地組織sql代碼,並允許設計中的靈活性來代替未來的變化。恕我直言。