六、分页插件
分页插件使用前置分析
limit index,pageSize
pageSize:每页显示的条数
pageNum:当前页的页码
index:当前页的起始索引,index = (pageNum-1)*pageSize
pageSize=4,pageNum=1,index=0 limit 0,4
pageSize=4,pageNum=3,index=8 limit 8,4
pageSize=4,pageNum=6,index=20 limit 8,4
首页上一页 2 3 4 5 6 下一页 末页
首页和上一页 只需要判断 当前页码 不为第一页
下一个和末页 只需要判断 当前页码 不为最后一页(需要计算:一共有几页,这个几页就是最后一页)
count:总记录数
totalPage:总页数
//实现下一页和末页
totalPage = count / pageSize; (若能整除正确,❌但是若可能不会整除,需要添加以下判断)
if(count % pageSize != 0){//若前面不能整除,需要在此处增加判断,判断不能被整除将页码+1
totalPage += 1;
}
中间导航页实现(展示中间五个页码:若为第一页前面两页能是-1,0页吗?增加判断显示1,2,3,4;若访问最后两页,能展示最大页码+1和+2吗?增加判断显示倒数5页)
分页插件为我们做完了这些判断,若没有分页插件需要考虑到以上提到的所有情况
6.1 分页插件的使用使用步骤
1.添加依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.0</version>
</dependency>
2.配置分页插件
在MyBatis的核心配置文件中配置插件
<plugins>
<!--设置分页插件-->
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
PageInterceptor分页拦截器,在我们查询之前添加limit将分页的信息添加进去。
3.分页插件的使用
a>在查询功能之前使用PageHelper.startPage(int pageNum, int pageSize)开启分页功能
-
pageNum:当前页的页码
-
pageSize:每页显示的条数
b>在查询获取list集合之后,使用PageInfo pageInfo = new PageInfo<>(List list, int navigatePages)获取分页相关数据
-
list:分页之后的数据
-
navigatePages:导航分页的页码数
c>分页相关数据 PageInfo{ pageNum=8, pageSize=4, size=2, startRow=29, endRow=30, total=30, pages=8, list=Page{count=true, pageNum=8, pageSize=4, startRow=28, endRow=32, total=30, pages=8, reasonable=false, pageSizeZero=false}, prePage=7, nextPage=0, isFirstPage=false, isLastPage=true, hasPreviousPage=true, hasNextPage=false, navigatePages=5, navigateFirstPage4, navigateLastPage8, navigatepageNums=[4, 5, 6, 7, 8] }
pageNum:当前页的页码
pageSize:每页显示的条数
size:当前页显示的真实条数
total:总记录数
pages:总页数
prePage:上一页的页码
nextPage:下一页的页码
isFirstPage/isLastPage:是否为第一页/最后一页
hasPreviousPage/hasNextPage:是否存在上一页/下一页
navigatePages:导航分页的页码数
navigatepageNums:导航分页的页码,[1,2,3,4,5]
4.使用测试类
public class PageTest {
@Test
public void testPage(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
//查询功能开始之前开启分页功能, pageNum:当前页的页码 pageSize:每页显示的条数
Page<Object> page = PageHelper.startPage(1, 4);
//添加分页参数之后,现在查询只查询前四条数据
List<Emp> list = mapper.selectByExample(null);
//返回Emp类型的PageInfo对象,里面保存了分页需要的所有参数
PageInfo<Emp> pageInfo = new PageInfo<>(list, 5);
list.forEach(System.out::println);
System.out.println(page);
System.out.println(pageInfo);
}
}
资料来源:B站UP尚硅谷