1. Maven引入
在service中引入pagehelper
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
2. application.yml 配置
pagehelper:
# 在运行时根据多数据源自动识别对应方言的分页 (不支持自动选择sqlserver2012,只能使用sqlserver)
# auto-dialect: true
# sqlserve
helper-dialect: sqlserver
# 参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页
reasonable: true
# 执行 count 查询
default-count: true
# 支持通过 Mapper 接口参数来传递分页参数,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页
support-methods-arguments: true
params: count=countSql
row-bounds-with-count: true
3. service 程序代码
3.1. 调用
在需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage
静态方法即可,紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。
//第二种,Mapper接口方式的调用,推荐这种使用方式。
PageHelper.startPage(1, 10);
List<User> list = userMapper.selectIf(1);
3.2. 返回结果
如果想取出分页信息,需要强制转换为Page<E>
,或者PageInfo<E>
//用PageInfo对结果进行包装
PageInfo page = new PageInfo(list);
3.3. PageInfo
public class PageInfo<T> extends PageSerializable<T> {
public static final int DEFAULT_NAVIGATE_PAGES = 8;
public static final PageInfo EMPTY = new PageInfo(Collections.emptyList(), 0);
private int pageNum;
private int pageSize;
private int size;
private long startRow;
private long endRow;
private int pages;
private int prePage;
private int nextPage;
private boolean isFirstPage;
private boolean isLastPage;
private boolean hasPreviousPage;
private boolean hasNextPage;
private int navigatePages;
private int[] navigatepageNums;
private int navigateFirstPage;
private int navigateLastPage;
...
}
public class PageSerializable<T> implements Serializable {
private static final long serialVersionUID = 1L;
protected long total;
protected List<T> list;
}