使用流式读取导出

为了解决客户系统中由于订单数据过大导致的内存溢出问题,采用了流式读取的方式来逐行查询和导出数据。在DAO接口中添加了resultHandler参数,并尝试在XML文件中设置fetchSize为负整数以获取流式结果集,但出现了错误提示。最终通过另一种方法成功实现了Mybatis的流式查询,并结合阿里EasyExcel进行流式导出。
摘要由CSDN通过智能技术生成

在做客户的系统时,提出一个需求,要求把订单导出,在mybatis查询时返回的结果集非常大,发生了内存溢出;后面上网查了一下推荐使用流式读取,按需逐行查询每条数据,实现低内存占用;

  1. 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值