IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Mybatis游标Cursor查询 -> 正文阅读

[大数据]Mybatis游标Cursor查询

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{
    @Resource
    SqlSessionFactory sqlSessionFactory;
    @Override
    public void doVerify(ServiceHandlerContext context) {

    }

    @Override
    public 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());
    }
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-05 12:06:24  更:2021-12-05 12:06:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 4:17:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码