面向小白的SpringBoot的Mybatis分页玩法

346 阅读2分钟

这是我参与2022首次更文挑战的第19天,活动详情查看:2022首次更文挑战

昨天我们玩了下myabtis的生成器,不知道大家学会了没有,今天我们来玩下mybatis的分页插件,分页是比较常见的业务功能,尤其是查询多条的时候,如果有几千条,不分页那绝对是灾难,你的用户会对产品失去信心的。

导入依赖

引入分页插件有下面2种方式,推荐使用 Maven 方式。这个就是分页插件的依赖,剩下的和原来一样。

<dependency>
   <groupId>com.github.pagehelper</groupId>
   <artifactId>pagehelper-spring-boot-starter</artifactId>
   <version>1.2.10</version>
</dependency>

搞配置

我们使用 RowBounds 作为分页参数时查询就要开启

pagehelper.offset-as-page-num=true

纠错机制,如果 pageNum <= 0 会查询第一页,如果 pageNum > pages 会查询最后一页。

pagehelper.reasonable

如果pagesize设置为0(或RowBounds的limit=0),就不执行分页,返回全部结果

pagehelper.page-size-zero=true

支持接口参数来传递分页参数

pagehelper.support-methods-arguments=true

搞接口

这里我们选择RowBounds作为查询分页参数,上面已经介绍过了,查询全部的订单。

@Select("select * from t_coffee order by id")
List<Coffee> findAllWithRowBounds(RowBounds rowBounds);

这是接口传递参数的查询方法,我们都来试一下。

@Select("select * from t_coffee order by id")
List<Coffee> findAllWithParam(@Param("pageNum") int pageNum,
                              @Param("pageSize") int pageSize);

搞代码和结果

我们调用方法,传递一个RowBounds参数,帮我们从数据库中查询三个订单,从订单1开始直到3,当然数据肯定是提前添加好的。

coffeeMapper.findAllWithRowBounds(new RowBounds(1, 3))
      .forEach(c -> log.info("Page(1) Coffee {}", c));

结果如下: image.png

这个应该是两个订单,我们看下结果

coffeeMapper.findAllWithRowBounds(new RowBounds(2, 3))
      .forEach(c -> log.info("Page(2) Coffee {}", c));

结果如下:

image.png

如果限制是0,就全部打印,就像这样:

image.png

当然,也可以指定PageNumber和size,这是比较常用的

coffeeMapper.findAllWithParam(1, 3)
      .forEach(c -> log.info("Page(1) Coffee {}", c));

结果如下:

image.png

最后打印了一下它的分页属性,很多很多:

image.png