大家好,又见面了,我是你们的朋友全栈君。
文章目录 - RowBounds原理
- RowBounds使用
- 1、接口
- 2、mapper.xml
- 3、测试
- RowBounds大坑
- 1、接口
- 2、mapper.xml
- 3、测试
RowBounds原理
- Mybatis可以通过传递RowBounds对象,来进行数据库数据的分页操作,然而遗憾的是,该分页操作是对ResultSet结果集进行分页,也就是人们常说的逻辑分页,而非物理分页(物理分页当然就是我们在sql语句中指定limit和offset值)。
- 不再使用SQL实现分页
RowBounds使用
1、接口
代码语言:javascript复制List<Map> getUserByRowBounds(Map<String,Integer> map);
2、mapper.xml
代码语言:javascript复制 <!--分页-->
<select id="getUserByRowBounds" parameterType="map" resultType="map" >
select *
from mybatis01.user ;
</select>
3、测试
代码语言:javascript复制 @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类。切记!切记
!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/190728.html原文链接:https://javaforall.cn