一、后端数据接口
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>