返回顶部
首页 > 资讯 > 后端开发 > 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://lsjlt.com/news/158921.html(转载时请注明来源链接)

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

猜你喜欢
  • 扩展tk.mybatis的流式查询功能实现
    mybatis查询默认是一次获取全部, 有时候需要查询上万上百万数据时,如果一次性读取到内存中,会容易导致OOM问题。这时候需要采用流式查询。以下扩展了tk.mybatis的流式查询...
    99+
    2024-04-02
  • 扩展tk.mybatis的流式查询功能如何实现
    本篇内容主要讲解“扩展tk.mybatis的流式查询功能如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“扩展tk.mybatis的流式查询功能如何实现”吧!mybatis查询默认是一次获取...
    99+
    2023-06-21
  • 详解扩展tk.mybatis的批量更新的功能
    tk.mybatis没有带批量更新的功能,批量更新却是经常使用的,所以需要自己实现。 批量更新网上主要有2种方式:case when方式、foreach方式 但是foreachzhe...
    99+
    2024-04-02
  • jQuery如何实现扩展功能
    这篇文章将为大家详细讲解有关jQuery如何实现扩展功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。扩展我们需要的功能$.extend({ min: func...
    99+
    2024-04-02
  • 实现mysql树查询的功能
    这篇文章给大家分享的是有关实现mysql树查询的功能的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。需求:查找当前(任意)级别下的所有子节点。通过自定义mysql函数实现,先贴代码...
    99+
    2024-04-02
  • SpringBoot实现快递物流查询功能(快递鸟)
    目录一、前言二、快递物流查询1、快递鸟工具类2、请求类3、响应结果类4、物流编码、状态枚举类5、测试api三、本文demo源码一、前言 本文将基于springboot2.4.0实现快...
    99+
    2024-04-02
  • exe转php:实现功能扩展的有效策略
    EXE转PHP:实现功能扩展的有效策略 随着互联网的发展,越来越多的应用程序开始向web化迁移,以实现更大范围的用户访问和更便捷的操作。在这个过程中,将原本以EXE(执行文件)方式运行...
    99+
    2024-03-04
    策略 功能扩展 转换 php脚本
  • MySql实现翻页查询功能
    首先明确为什么要使用分页查询,因为数据庞大,查询不可能全部显示在页面上,如果全部显示在页面上,也会造成查询速度慢的情况,所以分页查询解决了①数据查询;②性能优化,等(其他问题欢迎补充)的问题。 分页查询也分...
    99+
    2024-04-02
  • javascript实现查询商品功能
    本文实例为大家分享了javascript实现查询商品功能的具体代码,供大家参考,具体内容如下 这是没有点击查询的主界面图 这是点击名称查询之后 按照价格查询 代码: <...
    99+
    2024-04-02
  • vue实现触底查询功能
    本文实例为大家分享了vue实现触底查询功能的具体代码,供大家参考,具体内容如下 1.使用vant-list组件相关内容如下: 2.对象绑定值的默认值: 3.查询方法: 完整代码...
    99+
    2024-04-02
  • Java实现分页查询功能
    分页查询 分页查询将数据库中庞大的数据分段显示,每页显示用户自定义的行数,提高用户体验度,最主要的是如果一次性从服务器磁盘中读出全部数据到内存,有内存溢出的风险 真假分页 假分页: ...
    99+
    2024-04-02
  • 如何实现amazeui验证按钮扩展功能
    这篇文章将为大家详细讲解有关如何实现amazeui验证按钮扩展功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。做一个发送验证码按钮,点击后要60秒之后才能再次点击,利用原有的amazeui样式做的一些扩...
    99+
    2023-06-09
  • Redis如何实现数据分片扩展功能
    Redis是一款被广泛应用的开源Key-Value数据库,以其高性能、低延迟、高并发等优点深受开发者的青睐。然而随着数据量的不断增加,单节点的Redis已经无法满足业务需求。为了解决这个问题,Redis引入了数据分片(Sharding)功能...
    99+
    2023-11-07
    Redis数据分片 数据分片扩展 Redis扩展性
  • MyBatis流式查询的三种实现方法
    导读:流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果。流式查询的好处是能够降低内存使用 如果没有流式查询,我们想要从数据库取 1000 万...
    99+
    2024-04-02
  • springboot-mybatis/JPA流式查询的多种实现方式
    目录第一种方式: springboot + mybatis 流式查询(网上说的有三种,我觉得下面这种最简单,对业务代码侵入性最小)第二种方式:springboot+JPA 流式查询第...
    99+
    2022-12-19
    springboot-mybatis JPA流式查询 springboot-mybatis流式查询
  • Tk.mybatis零sql语句实现动态sql查询的方法(4种)
    目录实现方式:方式一:使用Example实现方式二:使用example.createCriteria实现方式三:使用Example.builder实现方式四:使用weekendSql...
    99+
    2024-04-02
  • Superset实现动态SQL查询功能
    使用自定义参数方式实现 superset 实现SQL动态查询 1、启用参数:config.py 设置"ENABLE_TEMPLATE_PROCESSING": True 2、当前su...
    99+
    2024-04-02
  • mysql实现分页查询功能的方法
    小编给大家分享一下mysql实现分页查询功能的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!mysql分页查询的方法:1、用具体字段代替【*】;2、先查寻索引;3、使用【between …...
    99+
    2024-04-02
  • Mybatis CURD及模糊查询功能的实现
    命名空间namespace: 配置文件中namespace中的名称为对应Mapper接口或者Dao接口的完整包名,必须一致! 1.查询(select) select: 接...
    99+
    2024-04-02
  • SpringBoot进行多表查询功能的实现
    实体类: Emp 类: @Data @NoArgsConstructor @AllArgsConstructor public class Emp { private i...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作