官网
https://pagehelper.github.io/docs/howtouse/
引入步骤
第1步:引入依赖
<!--分页插件-->
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.3.2</version>
</dependency>
第2步:配置拦截器插件
@Configuration
public class AppConfig {@Beanpublic PageInterceptor pageInterceptor() {PageInterceptor pageInterceptor = new PageInterceptor();Properties properties = new Properties();// 分页合理化,true开启,如果分页参数不合理会自动修正。默认false不启用properties.setProperty("reasonable", "true");pageInterceptor.setProperties(properties);return pageInterceptor;}}
[Ref] 整合PageHelper实现分页
第3步:插件的使用
前提: 业务提供 查询所有学生的方法
// com.zhangziwa.practisesvr.mapper.UserMapper#listStudents
<select id="listStudents" resultMap="StudentMap">SELECT * FROM students
</select>// com.zhangziwa.practisesvr.mapper.UserMapper
List<Student> listStudents();
不使用分页插件 会查出全部
List<Student> students = userMapper.listStudents();
方式1:PageInfo
public List<Student> listStudents2(Integer pageNum, Integer PageSize) {PageHelper.startPage(1, 10, true);PageHelper.orderBy("age asc");List<Student> students = userMapper.listStudents();PageInfo<Student> studentPageInfo = PageInfo.of(students);return students;
}
方式2:Page
public List<Student> listStudents2(Integer pageNum, Integer PageSize) {PageHelper.startPage(1, 10, true);PageHelper.orderBy("age asc");Page<Student> students = (Page<Student>) userMapper.listStudents();return students;
}
方式3:多数据源聚合时的手工分页
public List<Student> listStudents3(Integer pageNum, Integer pageSize) {// 模拟数据聚合List<Student> students3 = new ArrayList<>();List<Student> students1 = userMapper.listStudents();List<Student> students2 = userMapper.listStudents();students3.addAll(students1);students3.addAll(students2);Page<Student> studentsPage = PageHeaderUtils.manualPage(students3, pageNum, pageSize);return studentsPage;
}
// 数据聚合场景下的手工分页
// 也适合EmptyList场景 Page{count=true, pageNum=1, pageSize=10, startRow=0, endRow=0, total=0, pages=0, reasonable=null, pageSizeZero=null}
public static <E> Page<E> manualPage(List<E> res, Integer pageNum, Integer pageSize) {if (res == null) {res = new ArrayList<>();}int pageNumber = PageUtils.getPageNum(pageNum);int sizePerPage = PageUtils.getPageSize(pageSize);int totalSize = res.size();List<E> pageElements = res.stream().skip((long) (pageNumber - 1) * sizePerPage).limit(sizePerPage).toList(); // 分页Page<E> page = new Page<>();page.setPageNum(pageNumber);page.setPageSize(sizePerPage);page.setTotal(totalSize);page.setPages((totalSize / pageSize + ((totalSize % pageSize == 0) ? 0 : 1)));page.addAll(pageElements);return page;
}
常见问题
[Q&A] 在系统中发现了多个分页插件