程序员子龙(Java面试 + Java学习) 程序员子龙(Java面试 + Java学习)
首页
学习指南
工具
开源项目
技术书籍

程序员子龙

Java 开发从业者
首页
学习指南
工具
开源项目
技术书籍
  • 基础

  • JVM

  • Spring

  • 并发编程

  • Mybatis

    • mybatis-plus超详细讲解
    • MyBatis-Plus 流式查询
      • 定义Mapper
      • service
    • MyBatis-Plus 分页查询以及自定义sql分页
    • 使用mybatis逆向生成项目
    • SpringBoot整合Mybatis-plus
    • SpringBoot 集成 mybatis-plus,报:Invalid bound statement (not found) 异常,详细解决方案
    • Springboot、MyBatis-Plus 多数据源支持
    • Mybatis Plus官方分库分表神器,一个依赖轻松搞定!
    • MyBatis 动态 SQL 最全教程,这样写 SQL 太优雅了!
  • 网络编程

  • 数据库

  • 缓存

  • 设计模式

  • 分布式

  • 高并发

  • SpringBoot

  • SpringCloudAlibaba

  • Nginx

  • 面试

  • 生产问题

  • 系统设计

  • 消息中间件

  • Java
  • Mybatis
xugaoyi
2024-01-29
目录

MyBatis-Plus 流式查询

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

# 什么是流式查询?

流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用。

# 流式查询的用处?

当查询出来的数据量特别大时,数据库驱动把加载到的数据全部加载到内存里,就有可能会导致内存溢出(OOM)。 当数据库数据过大,普通查询:

# MyBatis-plus实现流式查询

# 定义Mapper

 @Select("select * from users t ${ew.customSqlSegment}")
 @Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = 1000)
 @ResultType(User.class)
 void getOrgWithBigData(@Param(Constants.WRAPPER) QueryWrapper<User> wrapper, ResultHandler<User> handler);

1
2
3
4
5
  • ResultSetType.FORWARD_ONLY 表示游标只向前滚动
  • fetchSize 每次获取数据量

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

xml这样实现:

<select id="selectFetchSize" fetchSize="1000" resultSetType="FORWARD_ONLY" resultType="com.demo.entity.TContent">  
    select * from t_content 
</select>

1
2
3
4

# service

QueryWrapper<User> wrapper = new QueryWrapper<User>();
//wrapper.eq("id",1);
userMapper.getOrgWithBigData(wrapper,resultContext -> {

User orgData = resultContext.getResultObject();
    //这边循环调用就可以实现业务了
    System.out.println(orgData);
});
1
2
3
4
5
6
7
8
上次更新: 2024/01/30, 15:08:57
mybatis-plus超详细讲解
MyBatis-Plus 分页查询以及自定义sql分页

← mybatis-plus超详细讲解 MyBatis-Plus 分页查询以及自定义sql分页→

最近更新
01
一个注解,优雅的实现接口幂等性
11-17
02
MySQL事务(超详细!!!)
10-14
03
阿里二面:Kafka中如何保证消息的顺序性?这周被问到两次了
10-09
更多文章>
Theme by Vdoing | Copyright © 2024-2024

    辽ICP备2023001503号-2

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式