导读
PageHelper是Mybatis的分页插件,支持多数据库、多数据源。PageHelper的使用方式有很多,这里只介绍我认为较为简单方便的一部分,完整版可以去Mybatis-PageHelper查看作者的原版文档。
附:
(1)PageHelper-Jar包下载
(2)Maven导入pom.xml
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.0.0</version>
</dependency>
1.配置拦截器
在mybatis-config.xml中配置
<!--
plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
properties?, settings?,
typeAliases?, typeHandlers?,
objectFactory?,objectWrapperFactory?,
plugins?,
environments?, databaseIdProvider?, mappers?
-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
<property name="param" value="value"/>
</plugin>
</plugins>
2.配置参数(常用,不完整)
helperDialect:用来指定数据库,例如oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h2,sqlserver2012,derby。可以不配置,插件会自动检测数据库的类型。
autoRuntimeDialect:设置为true时,多数据源会自动选择合适的分页方言。默认false
closeConn:默认值为 true。当使用运行时动态数据源或没有设置 helperDialect 属性自动获取数据库类型时,会自动获取一个数据库连接, 通过该属性来设置是否关闭获取的这个连接,默认true关闭,设置为 false 后,不会关闭获取的连接,这个参数的设置要根据自己选择的数据源来决定。
reasonable:分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。
params:用于从对象中根据属性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero
supportMethodsArguments:默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。
3.使用方法
(1)第一种,Mapper接口方式的调用,推荐这种使用方式。
//1是当前页数,10是页面记录数(第1页,10条数据)
PageHelper.startPage(1, 10);
//紧跟着startPage的第一个select将会被分页
List<Country> list = countryMapper.selectIf(1);
(2)第二种,配置了supportMethodsArguments=true和params
mybatis-config.xml
<property name="supportMethodsArguments" value="true"/>
<property name="params" value="pageNum=pageNum;pageSize=pageSize;"/>
直接将分页信息写在dao层接口中
public interface countryMapper {
List<Country> selectByPageNumSize(UserDTO user,int pageNum, int pageSize);
}
调用时检测到分页信息,就会自动调用分页
List<Country> list = countryMapper.selectByPageNumSize(user, 1, 10);
}
(3)第三种,将分页信息写在数据传输对象(DTO)中
如果 pageNum 和 pageSize 存在于 User 对象中,只要参数有值,也会被分页
public class User {
//下面两个参数名和 params 配置的名字一致
private Integer pageNum;
private Integer pageSize;
}
4.得到分页信息
//1是当前页数,10是页面记录数(第1页,10条数据)
PageHelper.startPage(1, 10);
//紧跟着startPage的第一个select将会被分页
List<Country> list = countryMapper.selectIf(1);
//PageInfo中存放了分页的所有信息
PageInfo<Country> page = new PageInfo<Country>(list);