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


相关推荐

  • linux的nohup命令

    linux的nohup命令在应用Unix/Linux时,我们一般想让某个程序在后台运行,于是我们将常会用&在程序结尾来让程序自动运行。比如我们要运行mysql在后台:/usr/local/mysql/bin/mysqld_safe–user=mysql&。可是有很多程序并不想mysqld一样,这样我们就需要nohup命令,怎样使用nohup命令呢?这里讲解nohup命令的一些用法。nohup/root/start.sh&在shell中回车后提示:[~]$appendingoutp

    2025年5月24日
    1
  • 自我学习规划

    自我学习规划从2018年的实习开始算起,工作时间也接近两年,在两年的工作中,由于工作时间较长(基本996),所以一直以来留给自我学习及提升的时间并不多,在相当多零碎的时间里,也只学习了一些零散的东西,对技术的提升

    2022年8月3日
    7
  • Java POI 导出Excel经典实现 导出Excel弹出下载框 Spring Boot【不定期更新】

    Java POI 导出Excel经典实现 导出Excel弹出下载框 Spring Boot【不定期更新】在web开发中,有一个经典的功能,就是数据的导入导出。特别是数据的导出,在生产管理或者财务系统中用的非常普遍,因为这些系统经常要做一些报表打印的工作。而数据导出的格式一般是EXCEL或者PDF,我这里就用两篇文章分别给大家介绍下。(注意,我们这里说的数据导出可不是数据库中的数据导出!么误会啦^_^)呵呵,首先我们来导出EXCEL格式的文件吧。现在主流的操作Ex…

    2022年5月29日
    39
  • Mac 下读写NTFS文件

    Mac 下读写NTFS文件MacOS版本:10.11.16 (OSXEICapitan)文章末尾附上小白使用使用方式 1、首先插入需要写入文件的NTFS格式的U盘或移动硬盘2、打开终端,然后执行以下命令,会提示输入密码,输入当前登录账号的密码即可,如果不行请输入root账号的密码sudonano/etc/fstab3、显示如下信息GNUnano2.0.6…

    2022年6月29日
    34
  • matlab自带的插值函数interp1的四种插值方法

    matlab自带的插值函数interp1的四种插值方法分段线性插值,临近插值,球面插值,三次多项式插值!!

    2022年6月14日
    40

发表回复

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

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