当前位置:网站首页>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类。切记!切记!
边栏推荐
- 助力疫情防控,30行代码就能搞定无服务器实时健康码识别!
- 【Transformer专题】Vision Transformer(ViT)原理 + 代码
- NC22 合并两个有序的数组
- 金鱼哥RHCA回忆录:CL210管理计算资源--红帽的超融合基础设施
- Mysql 查询语句中where字段= '' 作用是什么 ?如何实现多条件查询
- 第十七天笔记
- (LinkedList与链表) 和 (ArrayList与顺序表)的区别
- WWW'22 推荐系统论文之多任务与对比学习篇
- MySQL【数据类型】
- 20 Lectures on Disassembly of Multi-merchant Mall System Functions-Platform Distribution Overview
猜你喜欢
随机推荐
数据中台应该怎样规划与建设?_光点科技
QueryWrapper method explained
Anti-shake throttling (continue to update later)
【学术相关】北大一研究生偷取同门师妹论文发表,作者却挂名给了武大 3 位不知情的学生......
.NET性能优化-使用SourceGenerator-Logger记录日志
AI+BI+可视化,Sugar BI架构深度剖析
动态权重之多任务不平衡论文 (二) MetaBalance
tiup mirror sign
Mysql 查询语句中where字段= '' 作用是什么 ?如何实现多条件查询
MongoDB 《三》复制集集群搭建实例
QueryWrapper方法解释
numpy的学习笔记
类的比较大小(Comparable -> compareTo(类自己实现接口),Comparator -> compare(新建一个类作为比较器))
【暑期集训第一周:搜索】【DFS&&BFS】
VLAN实验
【[USACO06NOV]Corn Fields G】【状压DP】
ROS 之 KUKA iiwa编程
数仓:金融级数仓架构转型的最佳实践(下篇)
软件技术功能开发思路
莫比乌斯反演学习笔记









