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(" "); //拼接上一页 if(pageInfo.isHasPreviousPage()) { builder.append("<a href='"+path+"emps/"+pageInfo.getPrePage()+"'>上一页</a>"); builder.append(" "); }else { builder.append("上一页"); builder.append(" "); } //拼接页码 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(" "); }else { builder.append("<a href='"+path+"emps/"+i+"'>"+i+"</a>"); builder.append(" "); } } //拼接下一页 if(pageInfo.isHasNextPage()) { builder.append("<a href='"+path+"emps/"+pageInfo.getNextPage()+"'>下一页</a>"); builder.append(" "); }else { builder.append("下一页"); builder.append(" "); } //拼接尾页 builder.append("<a href='"+path+"emps/"+pageInfo.getPages()+"'>尾页</a>"); builder.append(" "); return builder.toString(); } }