1、PageHelper 分页插件简介
  1) PageHelper是MyBatis中非常方便的第三方分页插件
  2) 官方文档:
    https://github.com/pagehelper/Mybatis-PageHelper/blob/master/README_zh.md
  3) 我们可以对照官方文档的说明,快速的使用插件

2、PageHelper的使用步骤
  1) 导入相关包pagehelper-x.x.x.jar 和 jsqlparser-0.9.5.jar
  2) 在MyBatis全局配置文件中配置分页插件(注意插入顺序位置)

<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

  3) 使用PageHelper提供的方法进行分页
  4) 可以使用更强大的PageInfo封装返回结果

3、Page对象的使用

  1) 在查询之前通过 PageHelper.startPage(页码,条数) 设置分页信息,该方法返回Page对象

@Test
public void testPageHelper() throws Exception{
SqlSessionFactory ssf = getSqlSessionFactory();
SqlSession session = ssf.openSession();
try {
EmployeeMapper mapper =
session.getMapper(EmployeeMapper.class);
//设置分页信息
Page<Object> page = PageHelper.startPage(9, 1);
List<Employee> emps = mapper.getAllEmps();
for (Employee employee : emps) {
System.out.println(employee);
}
System.out.println("=============获取分页相关的信息=================");
System.out.println("当前页: " + page.getPageNum());
System.out.println("总页码: " + page.getPages());
System.out.println("总条数: " + page.getTotal());
System.out.println("每页显示的条数: " + page.getPageSize());
} finally {
session.close();
}
}

4、PageInfo对象的使用
  1) 在查询完数据后,使用PageInfo对象封装查询结果,可以获取更详细的分页信息以及可以完成分页逻辑

@Test
public void testPageHelper1() throws Exception{
SqlSessionFactory ssf = getSqlSessionFactory();
SqlSession session = ssf.openSession();
try {
EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
//设置分页信息
Page<Object> page = PageHelper.startPage(9, 1);
List<Employee> emps = mapper.getAllEmps();
//
PageInfo<Employee> info = new PageInfo<>(emps,5);
for (Employee employee : emps) {
System.out.println(employee);
}
System.out.println("=============获取详细分页相关的信息=================");
System.out.println("当前页: " + info.getPageNum());
System.out.println("总页码: " + info.getPages());
System.out.println("总条数: " + info.getTotal());
System.out.println("每页显示的条数: " + info.getPageSize());
System.out.println("是否是第一页: " + info.isIsFirstPage());
System.out.println("是否是最后一页: " + info.isIsLastPage());
System.out.println("是否有上一页: " + info.isHasPreviousPage());
System.out.println("是否有下一页: " + info.isHasNextPage()); System.out.println("============分页逻辑===============");
int [] nums = info.getNavigatepageNums();
for (int i : nums) {
System.out.print(i +" " );
}
} finally {
session.close();
}
}

分页实现: 首页 上一页 1 2 3 4 5 下一页 末页

package com.atguigu.ssm.util;

import javax.servlet.http.HttpServletRequest;

import com.atguigu.ssm.bean.Emp;
import com.github.pagehelper.PageInfo; /**
* 首页 上一页 1 2 3 4 5 下一页 末页
*
*/
public class PageUtil { public static String getPageInfo(PageInfo<Emp> pageInfo, HttpServletRequest request) { String path = request.getContextPath() + "/";
StringBuilder builder = new StringBuilder(); //拼接首页
builder.append("<a href='"+path+"emps/1'>首页</a>");
builder.append("&nbsp;&nbsp;"); //拼接上一页
if(pageInfo.isHasPreviousPage()) {
builder.append("<a href='"+path+"emps/"+pageInfo.getPrePage()+"'>上一页</a>");
builder.append("&nbsp;&nbsp;");
}else {
builder.append("上一页");
builder.append("&nbsp;&nbsp;");
} //拼接页码
int[] nums = pageInfo.getNavigatepageNums();
for (int i : nums) {
if(i == pageInfo.getPageNum()) {
builder.append("<a style='color:red;' href='"+path+"emps/"+i+"'>"+i+"</a>");
builder.append("&nbsp;&nbsp;");
}else {
builder.append("<a href='"+path+"emps/"+i+"'>"+i+"</a>");
builder.append("&nbsp;&nbsp;");
}
} //拼接下一页
if(pageInfo.isHasNextPage()) {
builder.append("<a href='"+path+"emps/"+pageInfo.getNextPage()+"'>下一页</a>");
builder.append("&nbsp;&nbsp;");
}else {
builder.append("下一页");
builder.append("&nbsp;&nbsp;");
} //拼接尾页
builder.append("<a href='"+path+"emps/"+pageInfo.getPages()+"'>尾页</a>");
builder.append("&nbsp;&nbsp;"); return builder.toString(); } }

最新文章

  1. CISCO VLAN ACL
  2. 【迁移学习】2010-A Survey on Transfer Learning
  3. Python For Data Analysis -- IPython
  4. c# UDP通信 列子
  5. 【LeetCode OJ】Pascal&#39;s Triangle II
  6. leetcode2:Add Two Numbers
  7. 用Eclipse+ADT创建可运行项目,创建lib项目,引用一个lib项目
  8. pjsip视频通信开发(上层应用)之EditText重写
  9. css解决IE6、Chrome、ff 浏览器position:fixed;和闪动问题
  10. Bash的脚本参数
  11. TreeView递归绑定数据的两种方法
  12. bzoj3156防御准备
  13. [速成]了解一致性hash算法
  14. 【http转https】其之二:申请Let&#39;s Encrypt颁发SSL证书
  15. ubuntu14.04下部署Tsung
  16. [boost][filesystem] 扫描给定目录下所有项
  17. POJ 1061 青蛙的约会(拓展欧几里得)
  18. php弹出式登录窗口并获得登录后返回值
  19. webpack打包配置模板
  20. 学习ABP遇到的问题汇总

热门文章

  1. QGIS 插件开发Debug教程——使用Pycharm
  2. python学习-Day5
  3. Halo 开源项目学习(四):发布文章与页面
  4. Docker Compose 的介绍、安装与使用
  5. k8s入门之ConfigMap(九)
  6. 记录一下l联想Y7000安装双系统(win10+ubuntu16.04)
  7. linux fedora35 配置jdk,安装mysql,安装tomcat
  8. CTFHub-HTTP协议五关刷题解答
  9. 好客租房6-React脚手架的应用(细节)
  10. 【JNPF修改通告】fastjson≤1.2.80反序列化漏洞