RowBounds实现分页[通俗易懂]

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 根据/proc/partitions获取插入的U盘设备名称

    根据/proc/partitions获取插入的U盘设备名称1 在/proc/partitions中存放着U盘的设备名称,如sda,sdb2等,以sd开头。major主设备号,比如一个U盘有3个分区,主设备名为sda,major为8,分区的major也为8,minor则为分区号,sda1,sda2,minor值为1,2sda的minor为0,name即为设备名,连接/dev./设备名,就可以挂载到一个目录。blocks表示物理设备逻辑块

    2022年6月26日
    33
  • 华为測试 超长整数相加[通俗易懂]

    华为測试 超长整数相加

    2022年1月20日
    40
  • 正确安全的下载 devcon

    正确安全的下载 devcon

    2021年6月17日
    97
  • Java工程师就业前景及薪资水平

    Java工程师就业前景及薪资水平Java工程师就业前景及薪资水平在互联网+的影响下,这几年,中国的互联网行业进入了高速发展的阶段,IT行业成为热门,备受追捧和关注。在全球云计算和移动互联网的产业环境下,想参加Java培训成为Java工程师也是很多小伙伴的追求,那么Java工程师就业前景如何?薪资水平高不高呢?下面就来具体了解一下吧。一、Java工程师就业前景1、Android开发:Android是全球最大的智能手机操作系统,根据StrategyAnalytics研究报告显示,全球智能手机出货量在2016年第三季度达到3.75亿台

    2022年7月9日
    20
  • 掩码、通配符与反掩码

    掩码、通配符与反掩码掩码采用按位与运算,计算一个ip地址的网络号0&0=0  1&0=0  即:x&0=00&1=0  1&1=1  即:x&1=xip地址的结构=网络号+主机号若要得到网络号,掩码的结构必然为前面是连续的1,后面是连续的0 通配符0表示严格匹配,1表示无需匹配0和1可以连续也可以不连续通配符与掩码的功能完全不同,没有任何关系例如:如何选择出192.x.1.x这样的

    2022年7月19日
    24
  • Redis删除策略和淘汰策略[通俗易懂]

    Redis删除策略和淘汰策略[通俗易懂]来的问题,Redis引入了定期删除策略(是他们的一个比较折中的方案)周期性轮询Redis库中的时效性数据,采取随机抽取的策略,利用过期数据占比的方式控制删除频度。实际上,在前面所说的删除策略,它针对的是expire命令进行的操作,也就是说那些具有时效性的数据(已经过期,并且还在占用内存的数据),我们在这里说的是针对那些并没有过期,或者是内存中的数据没有一个带有有效期,全是永久性数据,这时候删除策略就不起作用了,所以这个时候内存满了我们再去插入数据到内存是怎么做?删除这批key中已过期的。……

    2022年8月30日
    2

发表回复

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

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