在使用mybatis列表查询时存在大数据量内存溢出的风险,这里实现了在不改变代码逻辑的情况下将查询做分页切割。点击下载资源

由定时任务跑批的数据往往使用列表直接一次性查询出来,在程序刚上线的时候可能没有问题,但是随着业务的增长我们发现原来的列表查询可能会导致内存溢出的情况。那么此时就需要考虑使用分页将原来的查询使用分页进行切割。

大家第一个想到的就是改代码,我的想法是定义一个mybatis拦截器,拦截部分mapper方法名。返回一个自定义的继承于java.util.List的PrePageList , 这个PrePageList在调用mapper的方法时返回,此时PrePageList内部是没有数据的,在后续代码中调用增强for循环时PrePageList会自动去分页查询数据。

       同样的查询语句:


------------------------------------------------------------------------------------------------------------------------------

在分页切割之前是这样的:

..........

------------------------------------------------------------------------------------------------------------------------------

在使用分页切割之后是这样的:


......

使用说明:

1.  点击下载资源,解压,这里直接是一个maven工程,需要install

2.  install之后,需要配置mybatis拦截器如:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><!-- 全局映射器启用缓存 --><setting name="cacheEnabled" value="true" /><!-- 数据库超过60秒仍未响应则超时 --><setting name="defaultStatementTimeout" value="600" /><setting name="jdbcTypeForNull" value="NULL"/>  </settings><plugins><plugin interceptor="com.bqjr.core.util.prepage.PrePagePlugin"><property name="dialect" value="mysql"/><property name="pageSize" value="3" /><!-- 意思是以PrePage结尾的mapper方法名走分页切割框架 --><property name="pageSqlId" value=".*PrePage"/></plugin></plugins></configuration>

3.定义mapper接口(以PrePage结尾),接口在xml中的实现和正常编码一致:

public interface BusinessContractInnerMapper {List<BusinessContractInner> getContractListPrePage(@Param("start")Date startTime, @Param("end")Date endTime,@Param("creditIdList")List<String> creditIdList);List<BusinessContractInner> getContractList1PrePage(QueryParamDTO queryParamDTO);List<BusinessContractInner> getContractList3PrePage(Map<String, Object> map);List<BusinessContractInner> getContractList5PrePage();
}

4.调用时使用增强for循环遍历List做处理(不支持使用下标遍历):

 @Testpublic void queryContract4(){try {//2.执行业务List<BusinessContractInner> contractInners = bciMapper.getContractList5PrePage();printResult(contractInners);} catch (Exception e) {e.printStackTrace();}}private void printResult(List<BusinessContractInner> contractInners) {int i = 1;//open()for (BusinessContractInner inner : contractInners) {//也可以做写入文件等操作System.out.println(i+++"发送mq"+inner.getContractno());}//close()}

内存分析

可以看到在读取数据的过程中,整个内存随时间得推移,使用呈现锯齿状态。符合预期

原理解释

mybatis分页插件--列表切割成分页查询相关推荐

  1. java分页插件使用_mybatis的分页插件使用方法

    1.下载所需要的jar包,如果使用maven可以在maven中添加依赖: 插件的实现原理: 如果你想使用本项目的jar包而不是直接引入类,你可以在这里下载各个版本的jar包(点击Download下的j ...

  2. jQueryPager(JQuery分页插件pagination实现Ajax分页)

    jQueryPager(JQuery分页插件pagination实现Ajax分页) 下载地址 jQueryPager(JQuery分页插件pagination实现Ajax分页).rar 转载于:htt ...

  3. springboot整合bootstrap pagehelper分页插件 mybaties 做多表头表格查询列表

    1,页面效果 页面html  首先引入js  bootstrap  bootstrap-table <div style="width:1000px;">        ...

  4. 在springboot中使用PageHelper(mybatis的分页插件) 以及自定义分页

    PageHelper是国内非常优秀的一款开源的mybatis分页插件,它支持基本主流与常用的数据库, 例如mysql. oracle.mariaDB. DB2. SQLite.Hsqldb等. 本项目 ...

  5. java分页插件使用_MyBatis-Plus之分页插件使用

    分页在企业级系统必不可少,特别是早年开发人员,在sql里写limit.后来随着技术不断更新升级,向limit我们无需手写,可以通过插件来实现,插件本质上就是limit(在查询语句后面添加limit来做 ...

  6. 使用pagination分页插件实现Ajax动态分页

    pagination插件下载地址:https://pan.baidu.com/s/1c3QQ7XQ 一.前言 做的一个列表页要将所有结果显示出来,太多记录不能一次性显示,所以要进行分页.一开始尝试自己 ...

  7. 分页插件php,文章内容分页插件

    应用信息 名称: 文章内容分页插件 售价: 128元 应用ID: NextPage 最低要求: Z-BlogPHP 1.5.2.1935 (Zero) Build 151935 版 本: 6.1 发布 ...

  8. html分页插件大全,前端jquery分页插件推荐

    很久没更新文章了,最近项目需要使用前端来做分页,于是找了一款现有的jquery分页插件进行修改了一下,增加了些新功能以及加大了兼容性,其本质其实就是使用$.ajax()方法进行包装,把修改过后的代码贴 ...

  9. bootstrap分页插件php,bootstrap paginator分页插件使用方法

    Bootstrap Paginator是一款基于Bootstrap的js分页插件,本文主要给大家介绍bootstrap paginator分页插件的两种使用方式,一起看看吧,希望能帮助到大家. 分页有 ...

最新文章

  1. linux下vsftp
  2. 大牛告诉你,只有突破程序员思维,才不会沦为码农!
  3. torch 双线性上采样
  4. 【文件系统】删除文件名中含有空格的文件
  5. 当你从事不喜欢的事怎么办
  6. endl、flush、ends、unitbuf、nounitbuf区别及详解
  7. ASP.Net网站部署失败
  8. FreeSql (二十二)Dto 映射查询
  9. 实数序列频谱的共轭对称性(DFT与IDFT仿真实现)
  10. python杨辉三角_yiduobo的每日leetcode 118.杨辉三角 amp;amp; 119.杨辉三角II
  11. 微信小程序_简单组件使用与数据绑定
  12. 计算机的cpu怎么设计出来的,CPU是如何制作出来的?cpu的制造流程介绍
  13. OSChina 周二乱弹 —— 加班的代码不要枉费了我的童子功
  14. python100以内奇数累加和_用python脚本来计算100以内奇数或者偶数之和
  15. OSI七层网络协议及TCP/UDP、C/S架构详解
  16. 上dnf一直连接服务器中,Win7系统下玩dnf提示正在连接服务器如何解决
  17. 微信公众号编辑文章发布时,弹出,图文消息中含有敏感词
  18. 智联招聘内讧致员工心理不稳 穆穆-movno1
  19. SCU - 4438 Censor
  20. [Yocto RM]11 - Features

热门文章

  1. 推荐一个临时邮箱生成网站 Tempmail
  2. 6套粒子群算法(内含matlab代码)
  3. 学习CAD有哪些技巧?初学CAD需要注意什么?
  4. 导轮式机器人_一种轮式机器人及其导向轮总成的制作方法
  5. mac电脑通过linux安装motionpro
  6. HDU 1753 大明A+B
  7. 1+X养老照护服务虚拟仿真实训教学--加强养老护理员队伍建设
  8. go语言多线程与并发编程
  9. 面试问到你对加班有什么看法,该怎么回答
  10. 扁平化设计的前世今生