我的目標實際上是將數據庫的所有數據轉儲到XML文件中。數據庫不是非常大,大約300MB。問題是我的內存限制只有256MB(在JVM中)。很顯然,我不能只是把所有的東西都看成記憶。在MyBatis中處理大量數據
我設法解決這個問題,使用iBatis(是的,我的意思是iBatis,而不是myBatis)通過多次調用它的getList(... int skip, int max)
,增加skip
。這確實解決了我的記憶問題,但我對速度並沒有留下深刻的印象。變量名稱暗示了該方法在引擎蓋下執行的操作是讀取整個結果集,然後跳過指定的記錄。這聽起來對我來說是相當多餘的(我不是說這就是這個方法所做的,我只是基於變量名猜測)。
現在,我切換到我的應用程序的下一個版本myBatis 3。我的問題是:有沒有更好的方法來處理myBatis中塊的大量數據塊?有沒有辦法讓myBatis進程開始N個記錄,並將它們返回給調用者,同時保持結果集連接處於打開狀態,以便下次用戶調用getList(...)時,它將從N + 1記錄開始讀取,而不執行任何操作「退出」?
您的回答缺少一個重要的細節:您需要在您的語句中添加@Options(fetchSize = Integer.MIN_VALUE)(或XML等效項)。而且它在MyBatis 3.0.5中不起作用(我使用Eclipse Memory Analyzer進行了檢查)。我升級到MyBatis 3.1.1,現在流媒體正常工作。 –