栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

myBatis-plusmyBatis 流式查询,解决大数据量查询慢而且内存溢出的异常

myBatis-plusmyBatis 流式查询,解决大数据量查询慢而且内存溢出的异常

myBatis-plus/myBatis 流式查询,大数据量查询

myBatis这个开源框架的好处就不再赘述, myBatis-plus则更是myBatis的增强工具,框架给我提供很多查询数据方式,非常方便, 这里就介绍一下流式查询,也就是游标的方式去查询。

我们在完成工作的途中会遇到大数据量的查询,比如大量数据的导出等等,我们直接用list() 方法去查询的话, 会很慢很卡,因为框架耗费大量的时间和内存去把数据库查询的大量数据封装成我们想要的实体类,在这个过程中很可能使我们的项目报内存溢出 OOM(out of memory) 的异常,所以这个时候我们需要用框架的原生数据查询了,如下:

把整理类都给出来,方便在查找问题,屏蔽了部分本地路径

    mapper

    package com.***.mapper;

    import com.**.OrgData;
    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.baomidou.mybatisplus.core.mapper.baseMapper;
    import com.baomidou.mybatisplus.core.toolkit.Constants;
    import org.apache.ibatis.annotations.
    ;
    import org.apache.ibatis.mapping.ResultSetType;
    import org.apache.ibatis.session.ResultHandler;


    @Mapper
    public interface OrgDataMapper extends baseMapper {

    @Select(“select * from org_data t ${ew.customSqlSegment}”)
    @Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = 1000)
    @ResultType(OrgData.class)
    void getOrgWithBigData(@Param(Constants.WRAPPER) QueryWrapper wrapper, ResultHandler handler);

    }

注释:

@Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = 1000)

ResultSetType.FORWARD_ONLY 表示游标只向前滚动

fetchSize 每次获取量

@ResultType(OrgData.class)

    转换成返回实体类型

注意: 返回类型必须为void 哦,因为在handler里处理数据,所以这个hander 也是必须的

    mapper调用使用

        orgDataMapper.getOrgWithBigData(queryWrapper,resultContext -> {
    
            OrgData orgData = resultContext.getResultObject();
           //这边循环调用就可以实现业务了
    

    }

end

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/775056.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号