Mybatis游标查询

通常对一张表中大量数据处理时由于数据量太大都要使用分页分批查询处理,否则数据量太大会导致OOM等问题,但是如果不能使用分页时怎么进行处理,这是后就要使用Mybatis游标Cursor查询

原理

Cursor实现了Closeable和Iterable接口,我们可以通过迭代器来获取数据进行处理

示例

查询语句

在Mapper上写上对应的查询语句

//PriceIndexEntity是查出的实体对象
//ResultSetType表示游标的滚动模式 resultSetType = ResultSetType.FORWARD_ONLY 只能向前滚动
//fetchSize表示每次执行的记录数 fetchSize = Integer.MIN_VALUE
public interface CursorDemoMapper extends BaseMapper<PriceIndexEntity> {@Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = Integer.MIN_VALUE)@Select("select * from t_scf_price_index ")Cursor<PriceIndexEntity> scrollResult();
}

业务处理

public class DemoService implements IBusinessService{@ResourceSqlSessionFactory sqlSessionFactory;@Overridepublic void doVerify(ServiceHandlerContext context) {}@Overridepublic void doWork(ServiceHandlerContext context) {try(    //对应mysql数据库不会自动开启连接  所以需要手动开启连接,执行完成后自动关闭连接SqlSession sqlSession=sqlSessionFactory.openSession();//2、在连接中开启游标查询Cursor<PriceIndexEntity> priceIndexEntities = sqlSession.getMapper(CursorDemoMapper.class).scrollResult();) {//buffer的大小建议设置在1000左右。AtomicInteger index= new AtomicInteger(1);int bufferSize=1000;List<PriceIndexEntity> buffer =new ArrayList<>(bufferSize);priceIndexEntities.forEach(priceIndexEntity -> {//将查出的数据放到buffer中buffer.add(priceIndexEntity);if(index.getAndIncrement() ==bufferSize){//业务处理doPartWork(buffer);buffer.clear();index.set(1);}});//处理最后不足1000的数据if(buffer.size()>0){doPartWork(buffer);}} catch (IOException e) {log.error("XXX查询异常:【{}】",e.getMessage(),e);}ServiceHandlerContextExt.createSuccessResponseWithMsg(this,context,"sd");}public void doPartWork(List<PriceIndexEntity> buffer){//业务处理       System.out.println("================================="+buffer.size());}

Mybatis游标Cursor查询相关推荐

  1. mybatis 游标查询_数据库游标(示例代码)

    游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制.游标充当指针的作用.尽管游标能遍历结果中的所有行,但他一次只指向一行. 概括来讲,SQL的游标是一种临时的数据库对象,即可以用来存 ...

  2. 还在用分页?你out了 !试试 MyBatis 流式查询,真心强大!

    欢迎关注方志朋的博客,回复"666"获面试宝典 基本概念 流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果.流式查询的好处是能够降低内存使 ...

  3. 还在用分页?太Low !试试 MyBatis 流式查询,真心强大!

    以下文章来源方志朋的博客,回复"666"获面试宝典 基本概念 流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果.流式查询的好处是能够降低内 ...

  4. 强大:MyBatis 流式查询

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! ‍基本概念 流式查询指的是查询成功后不是返回一个集合而是返 ...

  5. mongodb3.2系统性学习——5、游标 模糊查询 findAndModify函数

    1首先介绍查询结果 返回的过程: 进行查询的时候mongodb 并不是一次哪个返回结果集合的所有文档,而是以多条文档的形式分批返回查询的结果,返回文档到内存中. 好处: 减少了客户端与服务器端的查询负 ...

  6. MyBatis 流式查询

    基本概念 流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果.流式查询的好处是能够降低内存使用. 如果没有流式查询,我们想要从数据库取 1000 万条记录而又没 ...

  7. SQL Server 数据库的维护(四)__游标(cursor)

    --维护数据库-- --游标(cursor)-- --概述: 注:使用select语句查询结果的结果集是一个整体,如果想每次处理一行或一部分行数据,游标可以提供这种处理机制.可以将游标理解为指针.指针 ...

  8. mybatis删除成功返回0_你还在用分页?试试 MyBatis 流式查询,真心强大!

    转自:捏造的信仰 segmentfault.com/a/1190000022478915 基本概念 流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果.流式查询 ...

  9. PLSQL 循环游标 cursor loop fetch into

    PLSQL 循环游标 cursor 的一点心得体会 set serveroutput on---------------打印输出信息,默认是FALSE declare ---------------- ...

  10. Oracle中游标Cursor介绍

    转自:http://zohan.group.iteye.com/group/wiki/2278-cursor Oracle中游标Cursor介绍 一  概念 游标是SQL的一个内存工作区,由系统或用户 ...

最新文章

  1. 解决Kali Linux 2020.1乱码问题
  2. oracle 系统时间前半年,oracle中将选定日期(年月型)减去1年
  3. 图像分类算法_图像分类算法优化技巧:Bag of Tricks for Image Classification
  4. 网络规划设计(项目类业务)
  5. codesys com库_CoDeSys官方系统库在线下载,替换国内下载服务器教程
  6. Rabin-Karp字符串查找算法学习:poj1200
  7. VUE组件间的数据传递
  8. sql 数据库维护索引_SQL索引维护
  9. apache通过AD验证
  10. 电压压力蕊片_陶瓷压力传感器工作原理、结构及分类
  11. DXperience重编译汉化的方法
  12. 西门子代理商 上海西纪帮您选型刚刚好
  13. 管理员后台页面html代码,HTML5技术实现的管理员后台模板界面
  14. 万娟 白话大数据和机械学习_《白话大数据与机器学习》.pdf
  15. [转]出现蓝屏代码stop ** 0x000000a5(0x00000001,0x89758d98,0x000000000,0x00000000)
  16. JVM进阶(六):鲜为人知的二次标记
  17. 红孩儿编辑器的开发规范
  18. python返回值return用法_Python中return函数返回值代码实例用法
  19. 3D游戏编程与设计作业六
  20. 加州大学圣地亚哥分校计算机科学排名,2020年加州大学圣地亚哥分校排名TFE Times美国最佳计算机科学硕士专业排名第17...

热门文章

  1. AutoRun机制详解
  2. 给大家推荐几个程序员必备网站
  3. epoll底层原理深究
  4. 申城常用电话(必看)(转)
  5. 2021-04-30 AndroidStudio_3种按钮点击事件_小白龙抄作业
  6. js月份的计算公式_JavaScript getMonth() 方法
  7. virtualbox下安装雪豹10.6系统(AMD下亲测成功)
  8. java中的add()_java中的add方法
  9. 北京联通光猫WO-36(HG220GS-U)改为桥接模式
  10. 跑revit计算机硬件要求,什么样的电脑能流畅跑Revit?Revit对电脑配置要求