当前位置:网站首页>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类。切记!切记
!
边栏推荐
猜你喜欢
随机推荐
JZ71 跳台阶扩展问题
机械臂速成小指南(十八):圆弧规划
Mobius inversion study notes
更舒适更安全更时尚 凯翼2023款炫界正式上市
CWE4.8:2022年危害最大的25种软件安全问题
不平衡之钥: 重加权法知几何
DSP-ADAU1452参考音设置方法
2.7 - 文件管理 2.8 - 多级目录结构 2.9 - 位示图
微信小程序:Framework inner error FLOW_CREATE_NODE
机械臂速成小指南(十四):多项式插值轨迹规划
dogs vs cats 二分类问题vgg16迁移学习
记一次内部分享——瞎扯淡
打破千篇一律,DIY属于自己独一无二的商城
tiup mirror set
2.4 - 三态模型
AI智能剪辑,仅需2秒一键提取精彩片段
SIGIR'22 推荐系统论文之序列推荐(长文)篇
从特征交互到数据交互,浅谈深度点击率模型的新趋势
JZ4 二维数组中的查找
VLAN实验