在做客户的系统时,提出一个需求,要求把订单导出,在mybatis查询时返回的结果集非常大,发生了内存溢出;后面上网查了一下推荐使用流式读取,按需逐行查询每条数据,实现低内存占用;
- dao接口这样写,提供第二个参数,即resultHandler,因为提供resultHandler后,mybatis就不会有返回值了,这里直接返回void
interface testDao {
void query(ResultHandler<SettleRecord> handler);
}
这里遇到过一个问题,查了很多博客说xml文件应该这样写,一定要写 fetchSize=”-2147483648”,不然到达jdbc那里返回的并不是流式的结果集
<select id="xxx"
fetchSize="-2147483648"
resultMap="xxx">
select * from xxxx
</select>
但是我在这里加了fetchSize=”-2147483648”之后,就会报一个错
java.sql: Invalid fetch size:-2147483648. size must be at least 0
后面查了一下解决不了就用了第二个方法就可以了
testDao{
@Options(resultSetType = ResultSetType.FORWARD_ONLY,fetch