RowBounds实现分页[通俗易懂]

RowBounds实现分页[通俗易懂]但使用RowBounds后,会将id>0的所有数据都加载到内存中,然后跳过offset=3条数据,截取10条数据出来,若id>0的数据有100万,则100w数据都会被加载到内存中,从而。


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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类。切记!切记!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190728.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • query.uniqueResult_validationquery not set

    query.uniqueResult_validationquery not setHibernate中使用createQuery和createSQLQuery的最大区别就是前者是使用hql语句,后者使用的是sql语句

    2022年9月30日
  • openwrt做主路由_开发三问

    openwrt做主路由_开发三问一、CBI语法CBI去修改UCI配置文件的值,CBI是通过web控件选择值去修改UCI文件。,所有的CBI文件都必须返回一个luci.cbi.Map类型的对象。–translate()是因为字符串中有空格,如果没有空格就不用使用该函数m=Map(“cbi_file”,translate(“FirstTabForm”),translate(“Pleasefilloutthefo

    2022年10月29日
  • vdbench 参数详解[通俗易懂]

    vdbench 参数详解[通俗易懂]HD:主机定义如果您希望展示当前主机,则设置hd=localhost。如果希望指定一个远程主机,hd=label。system=IP地址或网络名称。clients=用于模拟服务器的正在运行的客户端数量。SD:存储定义sd=标识存储的名称。host=存储所在的主机的ID。lun=原始磁盘、磁带或文件系统的名称

    2022年5月12日
  • booth算法原理的简单化理解「建议收藏」

    booth算法原理的简单化理解「建议收藏」最近,在学习带符号二进制数乘法(multiplicationof signednumbers)时接触到了布思算法(boothalgorithm)。由于是第一次接触,对于其原理却一无所知,书上的解释以及网上的文章不知是自己才疏学浅还本来就是泛泛而谈,没有让我了解其本质。经过长时间的思考分析,最终找到了一种比较简单的理解方法。举一个简单的例子,比如说计算10100001×00111110,

    2022年10月23日
  • ajax的实现_培训的基本内容有哪些?

    ajax的实现_培训的基本内容有哪些? 点击这里下载PDF文件。  点击这里下载示例文件。  点击这里下载视频文件。  相关内容:AJAX培训第二讲:使用AJAX框架(上)  “AJAX培训第二讲:使用AJAX框架”现在拆成了两部分,现在发布是第一部分,探讨了AJAX框架相关内容,并给出了一些最简单的例子。  如果大家对于讲座的内容有任何疑问,请在Q&A专用文章里进行提问,当然如果您有其它任何疑问的话,也能在那里提出,我会尽快为您

    2022年9月12日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号