大家好,又见面了,我是你们的朋友全栈君。
List<Map> getUserByRowBounds(Map<String,Integer> map); <!--分页-->
<select id="getUserByRowBounds" parameterType="map" resultType="map" >
select *
from mybatis01.user ;
</select> @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是将所有符合条件的数据全都查询到内存中,然后在内存中对数据进行分页
如我们查询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