1、SpringBoot-Mybatis整合PageHelper
1.1 配置
pom依赖
<!-- pagehelper依赖 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.9</version></dependency>
Yaml配置文件
## pagehelper分页插件配置 ###标识是哪一种数据库pagehelper.helperDialect=mysql#启用合理化,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页pagehelper.reasonable=true#为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZeropagehelper.params=count=countSql#支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页pagehelper.supportMethodsArguments=true#如果 pageSize=0 就会查询出全部的结果(相当于没有执行分页查询)
pageinfo的参数
//当前页private int pageNum;//每页的数量private int pageSize;//当前页的数量private int size;//总记录数private long total;//总页数private int pages;//结果集private List<T> list;//当前页面第一个元素在数据库中的行号private int startRow;//当前页面最后一个元素在数据库中的行号private int endRow;//前一页private int prePage;//下一页private int nextPage;//是否为第一页private boolean isFirstPage = false;//是否为最后一页private boolean isLastPage = false;//是否有前一页private boolean hasPreviousPage = false;//是否有下一页private boolean hasNextPage = false;//导航页码数private int navigatePages;//所有导航页号private int[] navigatepageNums;//导航条上的第一页private int navigateFirstPage;//导航条上的最后一页private int navigateLastPage;
1.1 编写一个Page工具类
public class PageUtils {static PageUtils pageUtils = new PageUtils();//每页的大小static final Integer pageSize = 2;//总数量static Integer totalCount;//当前页static Integer pageNum;public static Integer getPageSize() {return pageSize;}public static Integer getTotalCount() {return totalCount;}public static void setTotalCount(Integer totalCount) {PageUtils.totalCount = totalCount;}/** 获取总页数*/public static Integer getTotalPage() {Integer pageSize = pageUtils.pageSize;Integer totalCount = pageUtils.totalCount;if (totalCount % pageSize == 0) {return totalCount / pageSize;} else {return totalCount / pageSize + 1;}}/*通过前端传回的pageNum计算正确的pageNum*/public static Integer getPageNum(Integer temNum) {pageNum=temNum;if (temNum < 1) {pageNum = 1;} else if (temNum > getTotalPage()) {pageNum = getTotalPage();}return pageNum;}}
1.3 后台查询数据
@RequestMapping("/list")/*pageNum:前端传回的当前页employee:实体类,用于前端的条件查询*/public String listByPage(@RequestParam(defaultValue = "1", required = false) Integer pageNum, Employee employee, Model model) {//从数据库中获取要查询数据的所有记录PageUtils.setTotalCount(employeeService.getTotalCount());//通过工具类计算得到合适的pageNumpageNum = PageUtils.getPageNum(pageNum);//分页查询数据PageHelper.startPage(pageNum, PageUtils.getPageSize());List<Employee> list = employeeService.listEmpByPage(employee);//解决当没有任何匹配的查询结果时前端显示空白的情况if (list.size() == 0) {PageHelper.startPage(pageNum, PageUtils.getPageSize());list = employeeService.listEmpByPage(null);}PageInfo<Employee> pageInfo = new PageInfo<>(list);model.addAttribute("empPageInfo", pageInfo);return "/emp/list";}
1.4 前端分页界面
<div class="container" style="margin-top: 20px;"><form id="form2" action="/video/delAll" method="post"><table class="table table-bordered table-hover"style="text-align: center;table-layout:fixed"><thead><tr class="active"><th style="width:3%"><input type="checkbox" onclick="selectAll(this)"id="checkAllId"/></th><th style="width:5%">ID</th><th style="width:15%">姓名</th><th style="width:12%;">性别</th><th>Birth</th><th>部门</th><th>编辑</th><th>删除</th></tr></thead><tbody><tr th:each="emp:${empPageInfo.list}"><td><input type="checkbox" name="ids" th:value="${emp.getId()}" onclick="selectOne(this)"/></td><td th:text="${emp.getId()}"></td><td th:text="${emp.getName()}"></td><td th:text="${emp.getGender()=='0'?'女':'男'}"></td><td th:text="${#dates.format(emp.getBirthday(),'yyyy-MM-dd')}"></td><td th:text="${emp.getDepartment().getName()}"></td><td ><a shiro:hasAnyPermissions="root,user:update" href="${pageContext.request.contextPath}/video/queryById?id=${video.id}"><spanclass="glyphicon glyphicon glyphicon-edit" aria-hidden="true"></span></a></td><td ><a shiro:hasAnyPermissions="root,user:del" href="javascript:;" th:onclick="delEmpById([[${emp.getId()}]],[[${emp.getName()}]])"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span></a></td></tr></trth:forEach></tbody></table></form><div class="container"><div class="navbar-left" style="padding-right: 17px"><tr><a href="javascript:void(0)" th:onclick="queryVideo(1)">首页</a> <a href="javascript:void(0)" th:onclick="queryVideo([[${empPageInfo.getPageNum()-1}]])">上一页</a> <span style="font-size: 15px" th:text="${empPageInfo.pageNum}+'/'+${empPageInfo.pages}"></span> <a href="javascript:void(0)" th:onclick="queryVideo([[${empPageInfo.getPageNum()+1}]])">下一页</a> <a href="javascript:void(0)" th:onclick="queryVideo([[${empPageInfo.pages}]])">尾页</a> </tr></div></div>
queryVideo函数用于翻页时动态的更改当前页
//分页-上一页-下一页function queryVideo(pageNum) {document.getElementById("pageNum").value=pageNum;document.getElementById("form1").submit(); //form1表单是条件查询的表单}
结果展示:
