网站首页 > 精选文章 / 正文
@[TOC](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;
/**
* @Author sugar
*/
@Mapper
public interface OrgDataMapper extends BaseMapper<OrgData> {
@Select("select * from org_data t ${ew.customSqlSegment}")
@Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = 1000)
@ResultType(OrgData.class)
void getOrgWithBigData(@Param(Constants.WRAPPER) QueryWrapper<OrgData> wrapper, ResultHandler<OrgData> 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
作者:一个瓜_0284
链接:https://www.jianshu.com/p/b183ad291620
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Tags:querywrapper大于小于
猜你喜欢
- 2025-01-20 MySql中json类型数据的查询以及在MyBatis-Plus中的使用
- 2025-01-20 6K字详解:快速上手Spring Cache 整合 Redis 做缓存使用
- 2025-01-20 MyBatis-Plus 实现增删改查的源码解析
- 2025-01-20 Mybatis-Plus条件构造器select方法返回指定字段
- 2025-01-20 Java系统开发从入门到精通第三讲(文字版)
- 2025-01-20 MyBatis-Plus联表配置
- 2025-01-20 数据持久化技术——MP
- 2025-01-20 高并发下实现幂等的几种方式
- 2025-01-20 ShardingSphere分库分表?看这个教程就行了
- 2025-01-20 DIY 3 种分库分表分片算法,自己写的轮子才吊!