广告
返回顶部
首页 > 资讯 > 后端开发 > Python >扩展tk.mybatis的流式查询功能实现
  • 794
分享到

扩展tk.mybatis的流式查询功能实现

2024-04-02 19:04:59 794人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

mybatis查询默认是一次获取全部, 有时候需要查询上万上百万数据时,如果一次性读取到内存中,会容易导致OOM问题。这时候需要采用流式查询。以下扩展了tk.mybatis的流式查询

mybatis查询默认是一次获取全部, 有时候需要查询上万上百万数据时,如果一次性读取到内存中,会容易导致OOM问题。这时候需要采用流式查询。以下扩展了tk.mybatis的流式查询功能。 直接上干货:

@Options注解是关键


import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.mapping.ResultSetType;
import org.apache.ibatis.session.ResultHandler;


@tk.mybatis.mapper.annotation.ReGISterMapper
public interface SelectStreamByExampleMapper<T> {

    
    @Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = 1000)
    @SelectProvider(type = StreamExampleProvider.class, method = "dynamicsql")
    void selectStreamByExampleMapper(Object example, ResultHandler resultHandler);

}

带RowBounds的流式查询


import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.mapping.ResultSetType;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;


@tk.mybatis.mapper.annotation.RegisterMapper
public interface SelectStreamByExampleRowBoundsMapper<T> {

    
    @Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = 1000)
    @SelectProvider(type = StreamExampleProvider.class, method = "dynamicSQL")
    void selectStreamByExampleRowBoundsMapper(Object example, RowBounds rowBounds, ResultHandler resultHandler);

}

流式ExampleProvider


import org.apache.ibatis.mapping.MappedStatement;
import tk.mybatis.mapper.mapperhelper.MapperHelper;
import tk.mybatis.mapper.provider.ExampleProvider;



public class StreamExampleProvider extends ExampleProvider {

    public StreamExampleProvider(Class<?> mapperClass, MapperHelper mapperHelper) {
        super(mapperClass, mapperHelper);
    }


    
    public String selectStreamByExampleMapper(MappedStatement ms) {
        return this.selectByExample(ms);
    }

    
    public String selectStreamByExampleRowBoundsMapper(MappedStatement ms) {
        return this.selectByExample(ms);
    }

}

将SelectStreamByExampleMapper和SelectStreamByExampleRowBoundsMapper组合成一个接口



@tk.mybatis.mapper.annotation.RegisterMapper
public interface StreamMapper<T> extends
        SelectStreamByExampleMapper<T>,
        SelectStreamByExampleRowBoundsMapper<T> {
}

在BaseMapper中加入StreamMapper



public interface BaseMapper<T> extends Mapper<T>, MysqlMapper<T>, StreamMapper<T> {
}

使用例子:


this.userMapper.selectStreamByExampleRowBoundsMapper(example, new RowBounds(0, 1), resultContext -> {
     User user= (User) resultContext.getResultObject();
     System.out.println(user);
 });


this.userMapper.selectStreamByExampleMapper(example, resultContext -> {
    User user= (User) resultContext.getResultObject();
    System.out.println(User);
});

到此这篇关于扩展tk.mybatis的流式查询功能实现的文章就介绍到这了,更多相关tk.mybatis 流式查询内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网! 

--结束END--

本文标题: 扩展tk.mybatis的流式查询功能实现

本文链接: https://www.lsjlt.com/news/158921.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 扩展tk.mybatis的流式查询功能实现
    mybatis查询默认是一次获取全部, 有时候需要查询上万上百万数据时,如果一次性读取到内存中,会容易导致OOM问题。这时候需要采用流式查询。以下扩展了tk.mybatis的流式查询...
    99+
    2022-11-12
  • 扩展tk.mybatis的流式查询功能如何实现
    本篇内容主要讲解“扩展tk.mybatis的流式查询功能如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“扩展tk.mybatis的流式查询功能如何实现”吧!mybatis查询默认是一次获取...
    99+
    2023-06-21
  • SpringBoot实现快递物流查询功能(快递鸟)
    目录一、前言二、快递物流查询1、快递鸟工具类2、请求类3、响应结果类4、物流编码、状态枚举类5、测试api三、本文demo源码一、前言 本文将基于springboot2.4.0实现快...
    99+
    2022-11-12
  • 实现mysql树查询的功能
    这篇文章给大家分享的是有关实现mysql树查询的功能的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。需求:查找当前(任意)级别下的所有子节点。通过自定义mysql函数实现,先贴代码...
    99+
    2022-10-18
  • MyBatis流式查询的三种实现方法
    导读:流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用 如果没有流式查询,我们想要从数据库取 1000 万...
    99+
    2022-11-12
  • springboot-mybatis/JPA流式查询的多种实现方式
    目录第一种方式: springboot + mybatis 流式查询(网上说的有三种,我觉得下面这种最简单,对业务代码侵入性最小)第二种方式:springboot+JPA 流式查询第...
    99+
    2022-12-19
    springboot-mybatis JPA流式查询 springboot-mybatis流式查询
  • SpringBoot进行多表查询功能的实现
    实体类: Emp 类: @Data @NoArgsConstructor @AllArgsConstructor public class Emp { private i...
    99+
    2022-11-12
  • SpringBoot分页查询功能的实现方法
    目录前言:首先是手动实现分页查询:接下来是关联前端分页和后台数据:总结前言: 学习了SpringBoot分页查询的两种写法,一种是手动实现,另一种是使用框架实现。现在我将具体的实现流...
    99+
    2022-11-13
  • mysql实现分页查询功能的方法
    小编给大家分享一下mysql实现分页查询功能的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!mysql分页查询的方法:1、用具体字段代替【*】;2、先查寻索引;3、使用【between …...
    99+
    2022-10-18
  • Mybatis CURD及模糊查询功能的实现
    命名空间namespace: 配置文件中namespace中的名称为对应Mapper接口或者Dao接口的完整包名,必须一致! 1.查询(select) select: 接...
    99+
    2022-11-12
  • php怎么实现简单的查询功能
    要实现简单的查询功能,可以使用PHP和MySQL数据库进行操作。以下是一个简单的例子:1. 首先,连接到MySQL数据库:```ph...
    99+
    2023-09-07
    php
  • java怎么实现数据库的查询功能
    要实现Java中数据库的查询功能,需要使用JDBC(Java Database Connectivity)来连接数据库并执行SQL查...
    99+
    2023-09-20
    java 数据库
  • Python实现的简单dns查询功能示例
    本文实例讲述了Python实现的简单dns查询功能。分享给大家供大家参考,具体如下: #!/usr/bin/python import sys,socket def print_array(*arr):...
    99+
    2022-06-04
    示例 查询功能 简单
  • mybatis-plus多表关联查询功能的实现
    学习目标: mybatis-plus多表关联查询 学习内容: mybatis-plus多表关联查询 实体类部分代码 @Data @AllArgsConstructor @NoAr...
    99+
    2022-11-12
  • Spring cloud 实现房源查询功能的实例代码
    目录前言核心组件服务注册中心服务调用方式服务网关断路器数据库设计1 项目搭建1.1添加依赖2  开发房源查询模块:2.1 house-list 模块 2...
    99+
    2022-11-13
  • mybatisplus 的SQL拦截器实现关联查询功能
    由于项目中经常会使用到一些简单地关联查询,但是mybatisplus还不支持关联查询,不过在看官方文档的时候发现了mybatisplus的SQL拦截器(其实也是mybatis的)就想...
    99+
    2022-11-12
  • Mongodb实现的关联表查询功能【population方法】
    本文实例讲述了Mongodb实现的关联表查询功能。分享给大家供大家参考,具体如下: Population MongoDB是非关联数据库。但是有时候我们还是想引用其它的文档。这就是population的用武之...
    99+
    2022-10-18
  • LyScript实现指令查询功能的示例代码
    目录搜索内存中的机器码搜索内存反汇编代码通过对LyScript自动化插件进行二次封装,实现从内存中读入目标进程解码后的机器码,并通过Python代码在这些机器码中寻找特定的十六进制字...
    99+
    2022-11-11
  • Django城市信息查询功能的实现步骤
    目录前言数据准备阶段版本推荐项目实现阶段Django 工程的建立路由的配置及访问添加富文本模型创建城市与省份模型后台管理系统总结前言 基于 Pythgo的 Django 框架,编程实...
    99+
    2022-11-11
  • Vue简化用户查询/添加功能的实现
    目录1. 查询功能1.1 Vue核心对象:1.2 brand.html:1.3 selectAllServlet(无变化):2. 添加功能2.1 addBrandhtml:2.2 V...
    99+
    2023-01-29
    Vue用户查询 Vue用户添加
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作