我正在開發需要支持分頁的無狀態API。MyBatis RowBounds不限制查詢結果
我使用的是Oracle數據庫。 我使用Spring與MyBatis進行數據庫訪問。
從文檔中,我明白我可以使用RowBounds類來限制查詢返回的行數。
但是,似乎沒有對查詢進行特殊優化以支持分頁。
例如,如果我設置RowBounds有50條記錄,以抵消100,我期望的查詢有以下補充:
(original query with the where clause...)
and ROWNUM < 150
and ROWNUM >= 100
但什麼也沒有,只是我手動定義的查詢。
這對性能來說很糟糕,因爲我可能有幾千個結果。
我在做什麼錯?
謝謝。
感謝。看來RowBounds永遠不會使用Oracle rownum技術。另外,看起來resultSetType設置僅與有狀態的基於Web的應用程序相關,如顯示分頁結果的網頁。我在Spring和MyBatis中使用無狀態的EJB,所以我認爲它會使我的情況有所不同?似乎我必須迴避使用rownum解決方案。我真的認爲MyBatis團隊應該更清楚地傳達RowBounds的侷限性。他們將其描述爲分頁的簡單抽象方式,而事實上它的使用非常有限。 – odedia
當然,沒問題。理論上,即使在無狀態的應用程序中,它也可以工作 - 只需要使用具有不同'偏移量'的連續查詢以及'limit'。然而,它實際上取決於Oracle驅動程序如何處理它,因爲一次要讀取的行的數量取決於JDBC層,而JDBC層依次對各個驅動程序(「Oracle」,「 Postgres'等)。我同意它的做法比它更簡單。我發現當涉及到更復雜類型的映射器時,Mybatis也是如此,例如字符串數組。 – khampson