Spring Boot学习(十六):Spring Boot整合pagehelper(Mybatis分页神器)

前言

Spring Boot系列: 点击查看Spring Boot系列文章


PageHelper

要说MyBatis最常用的分页插件是什么?那一定非PageHelper不可了。

下面是官方的介绍

MyBatis 分页插件 PageHelper

如果你也在用 MyBatis,建议尝试该分页插件,这一定是最方便使用的分页插件。分页插件支持任何复杂的单表、多表分页。


Spring Boot集成PageHelper

下面,我们就在Spring Boot集成PageHelper

1、pom.xml添加依赖

注意:我们在Spring Boot推荐的依赖是pagehelper-spring-boot-starter,而不是单纯的pagehelper,pagehelper-spring-boot-starter对Spring Boot的集成性更好

<!-- 分页插件 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.5</version>
</dependency>

2、配置pagehelper属性

其实在Spring Boot中,pagehelper不在配置文件配置,也可以使用基础的分页功能。只是在我们需要使用到一些特性功能的时候,才需要配置

在application.properties,添加pagehelper的配置信息

#pagehelper分页插件配置
pagehelper.helper-dialect=mysql
pagehelper.params=count=countSql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true

下面是pagehelper的常用配置属性

1、helperDialect:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置helperDialect属性来指定分页插件使用哪种方言。配置时,可以使用下面的缩写值:
oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby

我使用的是Mysql数据库,所以pagehelper.helper-dialect=mysql

2、pageSizeZero:默认值为 false,当该参数设置为 true 时,如果 pageSize=0 或者 RowBounds.limit = 0 就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是 Page 类型)。

3、reasonable:分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。

4、params:为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero。

5、supportMethodsArguments:支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。 使用方法可以参考测试代码中的 com.github.pagehelper.test.basic 包下的 ArgumentsMapTest 和 ArgumentsObjTest。

6、offsetAsPageNum:默认值为 false,该参数对使用 RowBounds 作为分页参数时有效。 当该参数设置为 true 时,会将 RowBounds 中的 offset 参数当成 pageNum 使用,可以用页码和页面大小两个参数进行分页。

7、autoRuntimeDialect:默认值为 false。设置为 true 时,允许在运行时根据多数据源自动识别对应方言的分页 (不支持自动选择sqlserver2012,只能使用sqlserver)



3、使用pagehelper

使用pagehelper有多种方法,下面来看一些比较常见的用法

第一种方法:PageHelper.startPage 静态方法调用

在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可,紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。

例:

    @Test
    public void test1(){
//        查询第一页的10条数据
        PageHelper.startPage(1, 10);
//        查询sql
        List<User> allUser = userMapper.findAllUser();

//        用PageInfo对结果进行包装
        PageInfo<User>userPageInfo=new PageInfo<>(allUser);

    }

注意:分页只对在PageHelper.startPage后面的第一个查询方法有效,如果你在中间放入一个其他的查询,是无法分页的

例:

PageHelper.startPage(1, 10);

//紧跟着的第一个select方法会被分页
List<Country> list = countryMapper.selectIf(1);

//后面的不会被分页,除非再次调用PageHelper.startPage
List<Country> list2 = countryMapper.selectIf(null);

PageInfo

PageInfo是用于封装分页数据的一个类,里面包含了非常全面的分页属性

下面是一些常用的属性
Spring Boot学习(十六):Spring Boot整合pagehelper(Mybatis分页神器)_第1张图片

第二种方式:使用参数方式

想要使用参数方式,需要配置 supportMethodsArguments 参数为 true,同时要配置 params 参数。 例如下面的配置:

pagehelper.params=pageNum=pageNumKey;pageSize=pageSizeKey
pagehelper.support-methods-arguments=true

mapper方法

@Select("SELECT * FROM user")
    List<User> selectByPageNumSize( @Param("pageNumKey") int pageNum,
                                    @Param("pageSizeKey") int pageSize);

当调用这个方法时,如果同时发现了 pageNumKey 和 pageSizeKey 参数,那么这个方法就会被分页。

注意:pageNum 和 pageSize 两个属性同时存在才会触发分页操作

你可能感兴趣的:(springboot,java,spring,boot,mybatis,数据库,mysql)