当前位置:网站首页>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智能剪辑,仅需2秒一键提取精彩片段
数据中台应该怎样规划与建设?_光点科技
let块级作用域,var变量提升
24、wpf之布局(二)
类的比较大小(Comparable -> compareTo(类自己实现接口),Comparator -> compare(新建一个类作为比较器))
《独行月球》
JZ42 连续子数组的最大和
NC22 合并两个有序的数组
11.1-CM24 最近公共祖先
从Oracle日志解析学习数据库内核原理
Qt | 文件操作 QFile
机械臂速成小指南(十七):直线规划
坚持自主创新 线控底盘领军企业英创汇智获数亿元B+轮融资
2.3 - P、V、S机制
软件测试面试中90%会遇到的问题:“你会搭建测试环境吗?”
[LeetCode]剑指 Offer 54. 二叉搜索树的第k大节点
【[USACO12MAR]Cows in a Skyscraper G】【状压DP && DFS】
JZ9 用两个栈实现队列
JZ10 斐波那契数列
JZ81 调整数组顺序使奇数位于偶数前面(二)-相对位置变化