当前位置:网站首页>RowBounds实现分页
RowBounds实现分页
2022-08-02 15:50:00 【酷小亚】
RowBounds原理
- Mybatis可以通过传递RowBounds对象,来进行数据库数据的分页操作,然而遗憾的是,该分页操作是对ResultSet结果集进行分页,也就是人们常说的逻辑分页,而非物理分页(物理分页当然就是我们在sql语句中指定limit和offset值)。
- 不再使用SQL实现分页
RowBounds使用
1、接口
List<Map> getUserByRowBounds(Map<String,Integer> map);
2、mapper.xml
<!--分页-->
<select id="getUserByRowBounds" parameterType="map" resultType="map" >
select *
from mybatis01.user ;
</select>
3、测试
@Test
public void getUserByRowBounds(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//RowBounds实现
RowBounds rowBounds = new RowBounds(1,2);
//通过java代码层面实现分页
List<Map> userList = sqlSession.selectList("com.jin.mapper.UserMapper.getUserByRowBounds", null, rowBounds);
for (Map map1 : userList) {
System.out.println(map1);
}
sqlSession.close();
}
RowBounds大坑
RowBounds是将所有符合条件的数据全都查询到内存中,然后在内存中对数据进行分页
如我们查询user表中id>0的数据,然后分页查询sql如下:
select * from user where id >0 limit 3,10
但使用RowBounds后,会将id>0的所有数据都加载到内存中,然后跳过offset=3条数据,截取10条数据出来,若id>0的数据有100万,则100w数据都会被加载到内存中,从而造成内存OOM。
所以当数据量非常大时,一定要慎用RowBounds类。切记!切记!
边栏推荐
猜你喜欢
随机推荐
2022年值得尝试的7个MQTT客户端工具
IJCAI'22 推荐系统论文梳理
第十五天笔记
跨境电商看不到另一面:商家刷单、平台封号、黑灰产牟利
Qt | 文件操作 QFile
CWE4.8: The 25 most damaging software security issues in 2022
多商户商城系统功能拆解20讲-平台端分销概况
防抖节流(后续继续更新)
【2022河南萌新联赛第(三)场:河南大学】【部分思路题解+代码解析】
面试官的角度谈谈算法岗面试的过程(岗位涉及到OCR、目标检测、图像分割、语音识别等领域)
JZ71 跳台阶扩展问题
ROS人机交互软件
JZ70 矩形覆盖
机械臂速成小指南(十四):多项式插值轨迹规划
mysql 《一》触发器
8大软件供应链攻击事件概述
numpy的学习笔记
word公式复制到另一个word当中出现图片解决方案
tiup mirror modify
亏损扩大/毛利偏低,北斗智联与「智能座舱第一阵营」的不等号









