当使用myBatis时,我应该从DB获得很大的结果集并进行保密操作。 (例如CSV导出)
我在担心,如果返回类型为List,则所有返回的数据都将在我的内存中,并且会导致OutOfMemoryException。
因此,我想使用myBatis将结果作为ResultSet或Iterable 的类型获取。
告诉我任何解决方案。
最佳答案
您应该使用fetchSize(请参阅here)。根据堆大小和每行数据大小,您可以选择要从数据库中获取的结果集的数量。另外,由于基本上是使用数据导出到csv,因此可以使用具有mybatis分页项读取器的spring batch。尽管此项目阅读器在每页之后都存在缺点,但会触发请求以获取下一页,这会增加数据库的负载。如果您不担心负载,可以继续使用分页项读取器。或者有一个简单的另一个项目读取器称为JdbccursorItem reader