0
當使用myBatis時,我應該從DB獲得非常大的結果集並執行安全操作。 (如CSV導出)如何獲得myBatis(iBatis)結果作爲Iterable。 (如果行很大)
我在想,如果返回類型是List,所有在我的內存中返回的數據都會引起OutOfMemoryException。
所以,我想獲得結果作爲ResultSet類型或Iterable < MyObject>使用myBatis。
告訴我任何解決方案。
當使用myBatis時,我應該從DB獲得非常大的結果集並執行安全操作。 (如CSV導出)如何獲得myBatis(iBatis)結果作爲Iterable。 (如果行很大)
我在想,如果返回類型是List,所有在我的內存中返回的數據都會引起OutOfMemoryException。
所以,我想獲得結果作爲ResultSet類型或Iterable < MyObject>使用myBatis。
告訴我任何解決方案。
您應該使用fetchSize(請參閱here)。根據每行的堆大小和數據大小,您可以選擇要從數據庫中提取的結果集的數量。或者,因爲基本上你正在使用數據導出到csv,你可以使用mybatis分頁項目閱讀器的spring批處理。儘管在每個頁面之後的每個頁面讀取器中會退回一個請求,以獲取下一頁,這會增加數據庫的負載。如果您不擔心負載,則可以繼續使用分頁項目閱讀器。或者有簡單的另一個項目閱讀器稱爲JdbccursorItem閱讀器
感謝您的迴應。 最後,我得出結論,我應該使用ResultHandler,因爲如果我可以提取resultset作爲迭代器,myBatis在返回查詢結果後保留resultset。 – user3188838 2015-02-21 04:03:50