1、SpringBoot-Mybatis整合PageHelper

1.1 配置

pom依赖

  1. <!-- pagehelper依赖 -->
  2. <dependency>
  3. <groupId>com.github.pagehelper</groupId>
  4. <artifactId>pagehelper-spring-boot-starter</artifactId>
  5. <version>1.2.9</version>
  6. </dependency>

Yaml配置文件

  1. ## pagehelper分页插件配置 ##
  2. #标识是哪一种数据库
  3. pagehelper.helperDialect=mysql
  4. #启用合理化,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页
  5. pagehelper.reasonable=true
  6. #为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero
  7. pagehelper.params=count=countSql
  8. #支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页
  9. pagehelper.supportMethodsArguments=true
  10. #如果 pageSize=0 就会查询出全部的结果(相当于没有执行分页查询)

pageinfo的参数

  1. //当前页
  2. private int pageNum;
  3. //每页的数量
  4. private int pageSize;
  5. //当前页的数量
  6. private int size;
  7. //总记录数
  8. private long total;
  9. //总页数
  10. private int pages;
  11. //结果集
  12. private List<T> list;
  13. //当前页面第一个元素在数据库中的行号
  14. private int startRow;
  15. //当前页面最后一个元素在数据库中的行号
  16. private int endRow;
  17. //前一页
  18. private int prePage;
  19. //下一页
  20. private int nextPage;
  21. //是否为第一页
  22. private boolean isFirstPage = false;
  23. //是否为最后一页
  24. private boolean isLastPage = false;
  25. //是否有前一页
  26. private boolean hasPreviousPage = false;
  27. //是否有下一页
  28. private boolean hasNextPage = false;
  29. //导航页码数
  30. private int navigatePages;
  31. //所有导航页号
  32. private int[] navigatepageNums;
  33. //导航条上的第一页
  34. private int navigateFirstPage;
  35. //导航条上的最后一页
  36. private int navigateLastPage;

1.1 编写一个Page工具类

  1. public class PageUtils {
  2. static PageUtils pageUtils = new PageUtils();
  3. //每页的大小
  4. static final Integer pageSize = 2;
  5. //总数量
  6. static Integer totalCount;
  7. //当前页
  8. static Integer pageNum;
  9. public static Integer getPageSize() {
  10. return pageSize;
  11. }
  12. public static Integer getTotalCount() {
  13. return totalCount;
  14. }
  15. public static void setTotalCount(Integer totalCount) {
  16. PageUtils.totalCount = totalCount;
  17. }
  18. /*
  19. * 获取总页数
  20. */
  21. public static Integer getTotalPage() {
  22. Integer pageSize = pageUtils.pageSize;
  23. Integer totalCount = pageUtils.totalCount;
  24. if (totalCount % pageSize == 0) {
  25. return totalCount / pageSize;
  26. } else {
  27. return totalCount / pageSize + 1;
  28. }
  29. }
  30. /*
  31. 通过前端传回的pageNum计算正确的pageNum
  32. */
  33. public static Integer getPageNum(Integer temNum) {
  34. pageNum=temNum;
  35. if (temNum < 1) {
  36. pageNum = 1;
  37. } else if (temNum > getTotalPage()) {
  38. pageNum = getTotalPage();
  39. }
  40. return pageNum;
  41. }
  42. }

1.3 后台查询数据

  1. @RequestMapping("/list")
  2. /*
  3. pageNum:前端传回的当前页
  4. employee:实体类,用于前端的条件查询
  5. */
  6. public String listByPage(@RequestParam(defaultValue = "1", required = false) Integer pageNum, Employee employee, Model model) {
  7. //从数据库中获取要查询数据的所有记录
  8. PageUtils.setTotalCount(employeeService.getTotalCount());
  9. //通过工具类计算得到合适的pageNum
  10. pageNum = PageUtils.getPageNum(pageNum);
  11. //分页查询数据
  12. PageHelper.startPage(pageNum, PageUtils.getPageSize());
  13. List<Employee> list = employeeService.listEmpByPage(employee);
  14. //解决当没有任何匹配的查询结果时前端显示空白的情况
  15. if (list.size() == 0) {
  16. PageHelper.startPage(pageNum, PageUtils.getPageSize());
  17. list = employeeService.listEmpByPage(null);
  18. }
  19. PageInfo<Employee> pageInfo = new PageInfo<>(list);
  20. model.addAttribute("empPageInfo", pageInfo);
  21. return "/emp/list";
  22. }

1.4 前端分页界面

  1. <div class="container" style="margin-top: 20px;">
  2. <form id="form2" action="/video/delAll" method="post">
  3. <table class="table table-bordered table-hover"
  4. style="text-align: center;table-layout:fixed">
  5. <thead>
  6. <tr class="active">
  7. <th style="width:3%"><input type="checkbox" onclick="selectAll(this)"
  8. id="checkAllId"/></th>
  9. <th style="width:5%">ID</th>
  10. <th style="width:15%">姓名</th>
  11. <th style="width:12%;">性别</th>
  12. <th>Birth</th>
  13. <th>部门</th>
  14. <th>编辑</th>
  15. <th>删除</th>
  16. </tr>
  17. </thead>
  18. <tbody>
  19. <tr th:each="emp:${empPageInfo.list}">
  20. <td>
  21. <input type="checkbox" name="ids" th:value="${emp.getId()}" onclick="selectOne(this)"/>
  22. </td>
  23. <td th:text="${emp.getId()}"></td>
  24. <td th:text="${emp.getName()}"></td>
  25. <td th:text="${emp.getGender()=='0'?'女':'男'}"></td>
  26. <td th:text="${#dates.format(emp.getBirthday(),'yyyy-MM-dd')}"></td>
  27. <td th:text="${emp.getDepartment().getName()}"></td>
  28. <td ><a shiro:hasAnyPermissions="root,user:update" href="${pageContext.request.contextPath}/video/queryById?id=${video.id}"><span
  29. class="glyphicon glyphicon glyphicon-edit" aria-hidden="true"></span></a></td>
  30. <td >
  31. <a shiro:hasAnyPermissions="root,user:del" href="javascript:;" th:onclick="delEmpById([[${emp.getId()}]],[[${emp.getName()}]])">
  32. <span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
  33. </a>
  34. </td>
  35. </tr>
  36. </trth:forEach>
  37. </tbody>
  38. </table>
  39. </form>
  40. <div class="container">
  41. <div class="navbar-left" style="padding-right: 17px">
  42. <tr>
  43. <a href="javascript:void(0)" th:onclick="queryVideo(1)">首页</a>&nbsp;&nbsp;&nbsp;&nbsp;
  44. <a href="javascript:void(0)" th:onclick="queryVideo([[${empPageInfo.getPageNum()-1}]])">上一页</a>&nbsp;&nbsp;&nbsp;&nbsp;
  45. <span style="font-size: 15px" th:text="${empPageInfo.pageNum}+'/'+${empPageInfo.pages}"></span>&nbsp;&nbsp;&nbsp;&nbsp;
  46. <a href="javascript:void(0)" th:onclick="queryVideo([[${empPageInfo.getPageNum()+1}]])">下一页</a>&nbsp;&nbsp;&nbsp;&nbsp;
  47. <a href="javascript:void(0)" th:onclick="queryVideo([[${empPageInfo.pages}]])">尾页</a>&nbsp;&nbsp;&nbsp;&nbsp;
  48. </tr>
  49. </div>
  50. </div>

queryVideo函数用于翻页时动态的更改当前页

  1. //分页-上一页-下一页
  2. function queryVideo(pageNum) {
  3. document.getElementById("pageNum").value=pageNum;
  4. document.getElementById("form1").submit(); //form1表单是条件查询的表单
  5. }

结果展示: