当前位置:网站首页>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类。切记!切记!
边栏推荐
猜你喜欢
随机推荐
AI+BI+可视化,Sugar BI架构深度剖析
tiup mirror sign
numpy的学习笔记
怒写400篇AI文章!这群妹子卷疯了…
机械臂速成小指南(十八):圆弧规划
制胜精细化运营时代 华为应用市场打出内容、场景、商业运营组合拳
机械臂速成小指南(十四):多项式插值轨迹规划
面试官:可以谈谈乐观锁和悲观锁吗
JZ56 数组中只出现一次的两个数字
JZ10 斐波那契数列
技术分享| 融合调度系统中的电子围栏功能说明
第十七天笔记
WWW'22 推荐系统论文之图神经网络篇
[LeetCode]剑指 Offer 55 - I. 二叉树的深度
QueryWrapper方法解释
SIGIR'22 推荐系统论文之POI篇
【暑期集训第一周:搜索】【DFS&&BFS】
【服务器数据恢复】Raid阵列更换故障硬盘后数据同步失败的数据恢复案例
更舒适更安全更时尚 凯翼2023款炫界正式上市
Anti-shake throttling (continue to update later)






![【[NOI2001] 炮兵阵地】【状压DP】](/img/ae/6b01b175b0158fb804211931d57c0c.jpg)


