Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使myBatis(iBatis)结果为可接受。(如果是非常大的行)_Java_Database_Jdbc_Mybatis - Fatal编程技术网

Java 如何使myBatis(iBatis)结果为可接受。(如果是非常大的行)

Java 如何使myBatis(iBatis)结果为可接受。(如果是非常大的行),java,database,jdbc,mybatis,Java,Database,Jdbc,Mybatis,当使用myBatis时,我应该从数据库中获取非常大的结果集,并进行连续操作。(如CSV导出) 我在想,如果返回类型是List,那么所有返回的数据都会出现在我的内存中,并且会导致OutOfMemoryException 所以,我想使用myBatis将结果作为ResultSet或Iterable的一种类型 告诉我任何解决方案。您应该使用fetchSize(请参阅)。根据堆大小和每行数据大小,可以选择要从数据库中获取的结果集的数量。或者,因为基本上您使用的是数据导出到csv,所以您可以使用Spring

当使用myBatis时,我应该从数据库中获取非常大的结果集,并进行连续操作。(如CSV导出)

我在想,如果返回类型是List,那么所有返回的数据都会出现在我的内存中,并且会导致OutOfMemoryException

所以,我想使用myBatis将结果作为ResultSet或Iterable的一种类型


告诉我任何解决方案。

您应该使用fetchSize(请参阅)。根据堆大小和每行数据大小,可以选择要从数据库中获取的结果集的数量。或者,因为基本上您使用的是数据导出到csv,所以您可以使用SpringBatch,它具有mybatis分页项目阅读器。尽管此项读取器在每个页面后都会对每个页面进行缩进,但会触发获取下一页的请求,这会增加数据库的负载。如果您不担心负载,可以继续使用分页项阅读器。或者从mybatis 3.4.1开始,有一个名为JdbccursorItem reader的简单的另一个条目读取器,您可以返回
Iterable
,并且可以像这样使用(在结果已排序的情况下,请参见上面的
Cursor
API java doc了解详细信息):

MyEntityMapper.java

@Select({
      "SELECT *",
      "FROM my_entity",
      "ORDER BY id"
})
Cursor<MyEntity> getEntities();
@选择({
“选择*”,
“从我的实体”,
“按id订购”
})
游标getEntities();
MapperClient.java

MyEntityMapper mapper = session.getMapper(MyEntityMapper.class);
try (Cursor<MyEntity> entities = mapper.getEntities()) {
   for (MyEntity entity:entities) {
      // process one entity
   }
}
MyEntityMapper=session.getMapper(MyEntityMapper.class);
try(Cursor entities=mapper.getEntities()){
for(MyEntity实体:实体){
//处理一个实体
}
}

感谢您的回复。最后,我得出结论,我应该使用ResultHandler,因为如果我可以提取resultset作为迭代器,myBatis将在返回查询结果后保留resultset。