Pagehelper插件的知识点大致可以分为三个部分
- 搭建环境,引入jar包,配置。
- 使用方式,只需要记住一种即可。类似于在写SQL语句中,可以left join,也可以right join,它们实现的功能是相同的,习惯使用一种即可。
- 参数,在使用参数之前,首先需要了解使用方式,因为某些参数只有在特定的使用方式下才有意义。
1、配置
在配置之前首先需要引入jar包,在pom文件中添加
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>最新版本</version> </dependency>
我使用的版本是5.1.4
配置插件的方式有两种,在mybatis-config中的plugins标签中配置,在spring,或者是springboot中将pageInteceptor类注入,并与SqlSessionFactoryBean相关联。
1.1 Mybatis配置文件
在Mybatis-config.xml中配置plugins标签,配置如下:
<!-- 配置插件 --> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="" value=""> </plugin> </plugins>
此时需要注意plugins标签的顺序。
1.2 Spring
<!-- 注入pageInterceptor对象 --> <bean id="pagehelper" class="com.github.pagehelper.PageInterceptor"> <property name="properties"> <!--使用下面的方式配置参数,一行配置一个 --> <value> params=value1 </value> </property> </bean> <!-- 与sqlSessionFactory对象绑定 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 对应类中的 Interceptor[] plugins 属性 --> <property name="plugins"> <array> <bean ref="pagehelper"> </array> </property> </bean>
Springboot也需要经历这两个步骤,只不过通过代码形式,首先使用@Bean注解将PageInterceptor对象注入,之后注入SqlSessionFactoryBean对象,并设置它的plugins属性
2、使用方式
在官网上定义了6种使用方式,它们实现的功能是相同的,实现方式是不同的,习惯使用一种即可,我比较习惯使用PageHelper.startPage的方式。
原著中提到的六种使用方式如下:
- 使用RowBound对象的方式。
- 使用PageHelper.startPage的方式
- 使用PageHelper.offsetPage的方式
- 在Mapper接口中添加分页参数的方式
- 在Mapper接口中添加对象的方式,对象封装了分页的信息
- 会用ISelect接口的方式。
2.1 RowBound
RowBound对象封装了分页信息,第一个参数表示从结果集的第几条数据开始,第二个参数表示数据返回的条数。
当使用此方式时,
可以设置rowBoundsWithCount参数,它的值为true时,会在分页查询之前执行一条count查询。它的默认值为false
可以设置offsetAsPageNum参数,它的含义是将第一个参数的含义从offset改变为pageNum。
2.2 startPage方法
调用PageHelper.startPage方法,它的第一个参数为pageNum,它的第二个参数为pageSize,它是最常用的一种方式,在使用时需要注意查询方法必须紧跟在startPage方法之后。
当使用此方式时,
可以设置reasonable参数,它的意义是保证pageNum和pageSize的合理性。默认值为false。
可以设置pageSizeZero参数,值为true时,如果pageSize参数值为0时,会查询所有的结果。
2.3 offSet方法
调用PageHelper.offset方法,它的第一个参数为offset,它的第二个参数为limit,参数的含义与RowBound对象的参数含义相同。
在使用时需要注意查询方法必须紧跟在offset方法之后。
2.4 分页参数的方式
在Mapper的查询方法上添加分页信息,例如pageNum,pageSize。
当使用此方法时,
可以设置supportMethodsArguments参数,它的值为true时,会从查询方法中获取分页参数,它的默认值为false
可以设置params参数,它是建立分页参数与查询方法参数名称之间的映射关系,默认情况下查询方法上添加pageNum,pageSize参数时,会转换为对应的分页参数,如果方法上的参数名称不是pageNum,例如pageNumber时,此时无法识别该参数,需要建立映射pageNumber=pageNum
2.5 对象的方式
与分页参数的方式基本相同,区别在于是将分页参数封装为对象,并将对象传入查询方法。
2.6 ISelect接口方式
Page<Object> page = PageHelper.startPage(pageNum, pageSize).doSelectPage(()-> userMapper.selectMethod());
需要JDK版本为1.8以上,否则以匿名内部类方式会比较麻烦。
3、其他参数
其他参数使用默认值即可。
- helperDialect:数据库方言,区分数据库的类型,分页插件会自动检测。
- closeConn:在执行完SQL语句之后,是否自动关闭获取的连接,默认为true。
- aggregateFunctions:在执行查询语句之前,会执行一次count语句(聚合函数),值为聚合函数的名称,方法中的参数为列名。使用默认的count(*)即可。
- autoRuntimeDialect:默认值为 false。设置为 true 时,允许在运行时根据多数据源自动识别对应方言的分页。
4、注意事项
参考官网的重要提示