JPA+Springboot实现分页效果
后端
JPA 默认提供了一个分页类:org.springframework.data.domain.Page, 这个分页类已经能够满足各种分页需要了,所以大部分时候用它就足够了。但是除了一点,就是如图所示的,比如当前是第8页,前面要显示3个,后面要显示3个,总共7条分页点,这个类默认就不提供了。
所以我们做了一个 Page4Navigator, 首先对 Page 类进行了封装,然后在构造方法里提供了一个 navigatePages 参数。
navigatePages:导航需要的个数,这里设置为7,就表示如图所示的效果,前面3个,后面3个。
思路:
- 当总页数小于或等于导航页码数时,就遍历现有的页码总数,这种最简单了。
当总页数大于导航页码数(7)时,现在当前页
num
为8,就计算出开始数num - navigatePages / 2
和结尾数num + navigatePages / 2
,这种情况下分别为5和11,对开始数5使用for
循环7次,就可以得到一个int
数组变量navigatepageNums
[5,6,7,8,9,10,11],方便前端遍历展示。- 异常处理:
- 若起始值小于1时,则起始值设置为1,对着起始值循环7次
startNum++
得到数组 - 若结尾值大于总条数时,则结尾值设置为总条数,数组索引设置为6(7-1),对着结尾值循环7次
endNum--
得到数组
- 若起始值小于1时,则起始值设置为1,对着起始值循环7次
工具类Page4Navigator
private void calcNavigatepageNums() {
int navigatepageNums[];
int totalPages =