一、后端数据接口
EmployeeController.java
package com.ssm.crud.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ssm.crud.bean.Employee;
import com.ssm.crud.mapper.EmployeeMapper;
import com.ssm.crud.service.employeeService;
@Controller
public class EmployeeController {
@Autowired
employeeService employeeService;
@Autowired
EmployeeMapper employeeMapper;
/**
* 查询员工数据(分页查询)
*
* @return
*/
@RequestMapping("/emps")
public String getEmps( @RequestParam(value = "pn", defaultValue = "1") Integer pn, Model model) {
// 引入PageHelper分页插件
//设置返回查询结果的排序规律(字段名 排序规律)
PageHelper.orderBy("emp_id asc");
// 在查询之前只需要调用,传入页码,以及每页的大小
PageHelper.startPage(pn, 5);
// startPage后面紧跟着的这个查询操作就是一个分页查询操作
List<Employee> emps = employeeService.getAll();
// 使用pageInfo包装查询后的结果,只需要将pageInfo交给页面就行了。
// 封装了详细的分页信息,包括有我们查询出来的数据,传入连续显示的页数
PageInfo page = new PageInfo(emps, 5);
//设置返回查询结果的排序规律(字段名 排序规律)
PageHelper.orderBy("emp_id asc");
model.addAttribute("pageInfo", page);
/***** 一开始 EmployeeService 方法中 居然 返回的 null,忘记修改了 坑爹的教训啊
System.out.println("当前页码:"+page.getPageNum());
System.out.println("总记录数:"+page.getTotal());
System.out.println("每页的记录数:"+page.getPageSize());
System.out.println("总页码:"+page.getPages());
System.out.println("是否第一页:"+page.isIsFirstPage());
System.out.println("连续显示的页码:");
int[] nums = page.getNavigatepageNums();
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
******/
return "list";
}
}
从上面的数据接口我们可以看出,当http请求比如 /emp?pn=2 就能返回需要的信息了。
二、编写结果返回页
请求地址:http://localhost:8080/ssm.crud/emps
结果返回:list.jsp 【因为是转发,不会显示结果页的url路径】
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>员工列表</title>
<%
pageContext.setAttribute("APP_PATH", request.getContextPath());
%>
<!-- web路径:
不以/开始的相对路径,找资源,以当前资源的路径为基准,经常容易出问题。
以/开始的相对路径,找资源,以服务器的路径为标准(http://localhost:8080);需要加上项目名
http://localhost:8080/ssm.crud
-->
<script type="text/javascript"
src="${APP_PATH }/static/jquery-1.12.4/jquery.js"></script>
<link
href="${APP_PATH }/static/bootstrap-4.1.3-dist/css/bootstrap.min.css"
rel="stylesheet">
<script
src="${APP_PATH }/static/bootstrap-4.1.3-dist/js/bootstrap.bundle.min.js"></script>
<link
href="${APP_PATH }/static/font-awesome-3.2.1/css/font-awesome.min.css"
rel="stylesheet">
</head>
<body>
<div class="container">
<!-- 标题 -->
<div class="col-md-12">
<h1>SSM-CRUD</h1>
</div>
<!-- 按钮 -->
<div class="row">
<div class="col-md-4 offset-md-8">
<button class="btn btn-primary btn-sm">
<i class="icon-edit icon-large"></i> 编辑
</button>
<button class="btn btn-danger btn-sm">
<i class="icon-trash icon-large"></i> 删除
</button>
</div>
</div>
<!-- 显示表格数据 -->
<div class="row">
<div class="col-md-12">
<table class="table table-hover">
<tr>
<th>#</th>
<th>empName</th>
<th>gender</th>
<th>email</th>
<th>deptName</th>
<th>操作</th>
</tr>
<c:forEach items="${pageInfo.list}" var="emp">
<tr>
<th>${emp.empId}</th>
<th>${emp.empName }</th>
<th>${emp.gender == "M" ? "男" : "女"}</th>
<th>${emp.email}</th>
<th>${emp.department.deptName}</th>
<th>
<button class="btn btn-primary btn-sm">
<i class="icon-edit icon-large"></i> 编辑
</button>
<button class="btn btn-danger btn-sm">
<i class="icon-trash icon-large"></i> 删除
</button>
</th>
</tr>
</c:forEach>
</table>
</div>
</div>
<!-- 显示分页信息 -->
<div class="row">
<div class="col-md-6">
当前第${pageInfo.pageNum}页,总共有${pageInfo.pages}页,总共有${pageInfo.total}记录。
</div>
<div class="col-md-6">
<nav aria-label="Page navigation example">
<ul class="pagination">
<li class="page-item"><a class="page-link"
href="${APP_PATH}/emps?pn=1">首页</a></li>
<c:if test="${pageInfo.hasPreviousPage}">
<li class="page-item"><a class="page-link"
href="${APP_PATH}/emps?pn=${pageInfo.pageNum-1}"
aria-label="Previous"> <span aria-hidden="true">«</span><span
class="sr-only">Previous</span></a></li>
</c:if>
<!-- jstl 标签 获取的都是用 .属性 不能用 get属性方法,否则会报错-->
<c:forEach items="${pageInfo.navigatepageNums}" var="page_Num">
<c:choose>
<c:when test="${pageInfo.pageNum == page_Num }">
<li class="page-item active"><a class="page-link" href="#">${page_Num}</a></li>
</c:when>
<c:otherwise>
<li class="page-item"><a class="page-link"
href="${APP_PATH}/emps?pn=${page_Num}">${page_Num}</a></li>
</c:otherwise>
</c:choose>
</c:forEach>
<c:if test="${pageInfo.hasNextPage}">
<li class="page-item"><a class="page-link"
href="${APP_PATH}/emps?pn=${pageInfo.pageNum+1}"
aria-label="Next"> <span aria-hidden="true">»</span> <span
class="sr-only">Next</span>
</a></li>
</c:if>
<li class="page-item"><a class="page-link"
href="${APP_PATH}/emps?pn=${pageInfo.pages }">末页</a></li>
</ul>
</nav>
</div>
</div>
</div>
</body>
</html>