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=pageSizeZero
pagehelper.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());
//通过工具类计算得到合适的pageNum
pageNum = 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}"><span
class="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表单是条件查询的表单
}
结果展示: