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