目录
3.1 PageHelper.startPage使用以及各个属性说明
1、前言
本篇所涉及的操作基于NO.08 MyBatis创建逆向工程_qq_46053741的博客-优快云博客
所创建的逆向工程
2、 添加分页依赖和插件
在使用分页插件功能之前需要导入分页所需要的依赖和分页插件。
2.1 添加分页依赖
在pom.xml文件中添加pagehelper依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>3.2</version>
</dependency>
2.2 配置分页插件
在MyBatis的核心配置文件中添加分页插件
<plugins>
<!-- 设置分页插件-->
<plugin interceptor="icom.github.pagehelper.PageInterceptor"></plugin>
</plugins>
3、分页插件的使用
3.1 PageHelper.startPage使用以及各个属性说明
3.1.1 基本概念
PageHelper是MyBatis分页插件,在查询数据时,可以自动将结果封装成分页信息其中,startPage是PageHelper的一个重要方法。PageHelper.startPage()方法的作用是将接下来的一条SQL查询语句进行分页处理,查询结果会被自动封装成Page类型对象,其中包含了分页需要的全部信息,包括当前页码、每页显示数量、总记录数、总页数等。实际上,PageHelper进行分页处理的原理是使用MyBatis的拦截器技术,在查询语句的前后插入相应的代码,从而实现自动分页。
3.1.2 属性说明
1. pageNum
pageNum参数表示当前页码,必须传入一个大于0的整数值。它是分页查询中最基本的参数。如果pageNum的值小于1,则会被默认设置为1,即查询第一页。
2. pageSize
pageSize参数表示每页显示数量,必须传入一个大于0的整数值。它决定了每一页显示的数据条数。如果pageSize的值小于1,则会被默认设置为10,即每页显示10条数据。
3. count
count参数表示是否进行总数count查询,默认为true。如果count为true,则在执行分页查询前会额外进行一次count查询,用于统计总记录数。如果count为false,则不进行总数count查询,分页信息中的total字段为-1。这个参数的作用是控制查询的效率,如果不需要total值的话,可以将该参数设置为false。
例如:
// 不进行总数count查询
PageHelper.startPage(pageNum, pageSize, false);
4. reasonable
reasonable参数表示是否进行合理化分页,默认为false。如果reasonable为true,则pageNum参数小于1时将查询第一页,pageNum参数大于总页数时将查询最后一页。如果reasonable为false,则会抛出异常
例如:
// 进行合理化分页
PageHelper.startPage(pageNum, pageSize, true);
5. pageSizeZero
pageSizeZero表示是否将pageSize=0时查询所有结果(相当于没有执行分页查询),默认值为false。如果pageSizeZero为true,则在pageSize=0时会查询所有结果,而不是返回空集合。这个参数的作用是在某些特殊场景下使用,比如需要查询所有结果来进行某些统计运算的情况。
例如:
// pageSize=0时查询所有结果
PageHelper.startPage(pageNum, 0, true).setPageSizeZero(true);
3.1.3 其他使用技巧
1. 排序功能
PageHelper还提供了排序的功能,可以在分页查询时进行排序,格式为“order by 字段名”,多个排序可以用逗号隔开。具体使用方法如下:
PageHelper.orderBy("id DESC");
// 查询操作
ministerMapper.selectByExample(ministerExample);
2. RowBounds方式分页
除了startPage方式外,PageHelper还支持RowBounds方式的分页,用于对不支持分页插件的情况下的分页查询。具体使用方法如下:
// 创建RowBounds对象
RowBounds rowBounds = new RowBounds(offset, limit);
// 查询操作
List<Minister> list = ministerMapper.selectByExampleWithRowbounds(ministerExample, rowBounds);
3.2 PageInfo中各个属性说明
private int pageNum; //当前页的页码
private int pageSize; //每页的数量
private int size; //当前页的数量
//可以在页面中"显示startRow到endRow 共size条数据"
private int startRow; //当前页面第一个元素在数据库中的行号
private int endRow;//当前页面最后一个元素在数据库中的行号
private long total; //总记录数
private int pages; //总页数
private List<T> list; //结果集
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; //导航条上的最后一页
3.3 分页流程
在查询功能之前使用PageHelper.startPage(int pageNum, int pageSize)开启分页功能,其中pageNum参数表示当前页的页码, pageSize参数表示每页显示的条数。
//开启分页功能
Page<Object> page=PageHelper.startPage(2,7);
查询获取list集合
//获得全部人员信息
List<Minister> list=ministerMapper.selectByExample(null);
使用PageInfo pageInfo = new PageInfo<>(List list, int navigatePages)获取分页相关数据 ,其中list参数表示分页之后的数据 ,navigatePages参数表示导航分页的页码数
//获取分页相关数据
PageInfo<Minister> pageInfo=new PageInfo<Minister>(list,3);
4、测试方法完整代码:
@Test
public void PageTest() {
SqlSession sqlSession= JdbcUtiles.getSqlSession();
MinisterMapper ministerMapper=sqlSession.getMapper(MinisterMapper.class);
//目标:查询所有人员信息.显示第二页的人员信息
//开启分页功能
Page<Object> page=PageHelper.startPage(2,7);
System.out.println("page信息------>"+page);
//获得list集合
List<Minister> list=ministerMapper.selectByExample(null);
System.out.println("list信息------>"+list);
//获取分页相关数据
PageInfo<Minister> pageInfo=new PageInfo<Minister>(list,3);
System.out.println("pageInfo信息------>"+pageInfo);
JdbcUtiles.closeSqlSession(sqlSession);
}