分页查询的优点
分页查询,是指当所查询数据量较多且需要显示时,采用按页显示的方法,分多次显示数据信息,而不是一次性全部显示
优点如下:
对服务器:一次性查询所有信息,服务器压力大,分页查询服务器压力小
对客户端:一次性显示所有信息,需要更多流量,加载时间也会更长,分页显示没有这个问题
对用户体验:一般最有价值的信息都会在前几页显示,也方便用户阅读,后部分查询出来的数据被使用几率很低
pagehelper的具体实现
1 实现原理:
PageHelper框架可以实现我们提供页码和每页条数,自动实现分页效果,收集分页信息,其分页原理就是在程序运行时,拦截sql语句,在语句尾部添加limit关键字,并按照分页信息向limit后追加分页数据
2 实现过程:
在核心配置文件中加入
持久层
Select("select id,name,address,gender from student_os")
List<Student> findAllStudents();
// page是页码,pageSize是每页条数
public PageInfo<Order> getAllStudentsByPage(Integer page,Integer pageSize){
// 使用指定的代码设置要查询的页码和每页的条数
// 在后面执行查询时,会自动按照这里指定的数据执行分页查询
// page是页码,1就是查询第一页,pageSize是每页条数
PageHelper.startPage(page,pageSize);
// 下面执行查询操作,这个操作会被PageHelper框架在运行的sql语句末尾添加limit语句
List<Student> list= studentMapper.findAllStudents();
// list中的数据就是按照分页条件查询出来的某一页的数据
// 但是分页查询方法返回的并不是list类型的对象,我们也需要获得分页的信息
// 然后将查询出的数据和分页信息结合返回,这个类型,就是PageInfo
public JsonResult<PageInfo<Student>> pageOrders(
Integer page,Integer pageSize){
PageInfo<Student> pageInfo=orderService.getAllStudentsByPage(page,pageSize);
return JsonResult.ok(page+" 页查询结果",pageInfo);
}
pagehelper实现优化
原因:
上面提到,pageinfo中不仅包含所要查询的数据信息,还包含许多页面相关的信息,具体如下
//当前页
private int pageNum;
//每页的数量
private int pageSize;
//当前页的行数量
private int size;
//当前页面第一个元素在数据库中的行号
private int startRow;
//当前页面最后一个元素在数据库中的行号
private int 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;
等等