需求
对于多条数据对单个页面难以显示,所以分页处理很有必要,现在是大数据时代,我们会遇到越来越多的数据,一个界面不太可能把所有数据显示完全,而且不好看,使用起来查找信息不方便,所以需要分页查询
这里的例子,以全部查询和模糊查询结果为例
我们没有使用框架里的分页,而是自己创建一个简单的实体类实现。
代码
1、创建实体类
这个都是一样的,记录当前页数,每页显示数据数,总数据数,总页数,每页显示数据。
PageBean<T>
是一种泛型(通配)。
package ssm.dao;
import java.util.List;
public class PageBean<T> {
private int currPage; //当前页数
private int pageSize; //每页显示的记录数
private int totalCount; //总记录数
private int totalPage; //总页数
private List<T> lists; //每页的显示的数据
public PageBean() {
super();
}
public int getCurrPage() {
return currPage;
}
public void setCurrPage(int currPage) {
this.currPage = currPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public List<T> getLists() {
return lists;
}
public void setLists(List<T> lists) {
this.lists = lists;
}
}
2、mapper层(数据库操作)
我的另一个实体类存取数据库信息PACKET
(1)mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="ssm.mapper.PACKETMapper">
<!-- 全部查询 -->
<select id="selectPacketAll" parameterType="map" resultType="PACKET">
SELECT
*
FROM
packet
LIMIT
#{start},#{size}
</select>
<!-- 查询数据条数 -->
<select id="selectPacketCountAll" resultType="int">
SELECT
COUNT(*)
FROM
packet
</select>
<!-- 模糊查询 -->
<select id="selectPacketName" parameterType="map" resultType="PACKET">
SELECT
*
FROM
packet
WHERE
name LIKE "%"#{packetName}"%"
LIMIT
#{start},#{size}
</select>
<!-- 查询数据条数 -->
<select id="selectPacketCountName" parameterType="String" resultType="int">
SELECT
COUNT(*)
FROM
packet
WHERE
name LIKE "%"#{packetName}"%"
</select>
</mapper>
(2)mapper.java
package ssm.mapper;
import java.util.HashMap;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import ssm.dao.PACKET;
public interface PACKETMapper {
//全部查询
int selectPacketCountAll();
List<PACKET> selectPacketAll(HashMap<String,Object> map);
//模糊查询
int selectPacketCountName(String packetName);
List<PACKET> selectPacketName(HashMap<String,Object> map);
}
3、service层
(1)service.java
package ssm.service;
import java.util.HashMap;
import java.util.List;
import ssm.dao.PACKET;
public interface PACKETService {
//全部查询
int selectPacketCountAll();
List<PACKET> selectPacketAll(HashMap<String,Object> map);
//模糊查询
int selectPacketCountName(String packetName);
List<PACKET> selectPacketName(HashMap<String,Object> map);
}
(2)serviceimpl.java
package ssm.service;
import java.util.HashMap;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import ssm.dao.PACKET;
import ssm.mapper.PACKETMapper;
@Service
public class PACKETServiceimpl implements PACKETService{
@Autowired
PACKETMapper pac;
//查找全部
@Override
public int selectPacketCountAll() {
return pac.selectPacketCountAll();
}
@Override
public List<PACKET> selectPacketAll(HashMap<String,Object> map) {
return pac.selectPacketAll(map);
}
//模糊查询
@Override
public int selectPacketCountName(String packetName) {
return pac.selectPacketCountName(packetName);
}
@Override
public List<PACKET> selectPacketName(HashMap<String,Object> map) {
return pac.selectPacketName(map);
}
}
4、controller层
package ssm.controller;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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 ssm.dao.PACKET;
import ssm.dao.PageBean;
import ssm.service.PACKETService;
@Controller
public class PACKETController {
@Autowired
PACKETService pac;
@RequestMapping(value="/index")
public String welocme() {
return "index";
}
@RequestMapping(value="/packet")
public String getPacketAll(HttpServletRequest req,HttpServletResponse resq,Model model)throws ServletException, IOException{
//新建对象
HashMap<String,Object> map = new HashMap<String,Object>();
PageBean<PACKET> pageBean = new PageBean<PACKET>();
//封装当前页数
req.setCharacterEncoding("UTF-8");
int currentPage=Integer.parseInt(req.getParameter("currentPage"));
pageBean.setCurrPage(currentPage);
//每页显示的数据
int pageSize=3;
pageBean.setPageSize(pageSize);
//封装总记录数
int totalCount = pac.selectPacketCountAll();
pageBean.setTotalCount(totalCount);
//封装总页数,向上取整
double tc=totalCount;
double ps=pageSize;
Double totalPage =Math.ceil(tc/ps);
pageBean.setTotalPage(totalPage.intValue());
//记录起始位置和每页数据数
map.put("start",(currentPage-1)*pageSize);
map.put("size", pageBean.getPageSize());
//model把分页信息pageBean和查询信息list传递给前端
List<PACKET> lists = pac.selectPacketAll(map);
pageBean.setLists(lists);
model.addAttribute("pageBean",pageBean);
return "packet";
}
@RequestMapping(value="/selecPacketName")
public String selectPacketName(HttpServletRequest req,HttpServletResponse resq,Model model)throws ServletException, IOException{
//新建对象
HashMap<String,Object> map = new HashMap<String,Object>();
PageBean<PACKET> pageBean = new PageBean<PACKET>();
//封装当前页数
req.setCharacterEncoding("UTF-8");
int currentPage=Integer.parseInt(req.getParameter("currentPage"));
String packetName=req.getParameter("packetName");
pageBean.setCurrPage(currentPage);
//每页显示的数据
int pageSize=3;
pageBean.setPageSize(pageSize);
//封装总记录数
int totalCount = pac.selectPacketCountName(packetName);
pageBean.setTotalCount(totalCount);
//封装总页数,向上取整
double tc=totalCount;
double ps=pageSize;
Double totalPage =Math.ceil(tc/ps);
pageBean.setTotalPage(totalPage.intValue());
map.put("start",(currentPage-1)*pageSize);
map.put("size", pageBean.getPageSize());
map.put("packetName", packetName);
//model把分页信息pageBean和查询信息list传递给前端
List<PACKET> lists = pac.selectPacketAll(map);
pageBean.setLists(lists);
model.addAttribute("pageBean",pageBean);
return "packetName";
}
}
5、前端代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@page import="org.springframework.http.HttpRequest"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<meta charset="UTF-8">
<title>获取分享</title>
<link rel="stylesheet" type="text/css" href="/css/packet.css" />
</head>
<body>
<form action="/selecPacketName" method="post">
<input type="hidden" name="currentPage" value="1" />
<input type="text" name="packetName" />
<input type="submit" value="搜索" /><br/>
</form>
<!-- 只在前端显示设备名称 -->
<table border="1">
<tr>
<th>分享名称</th>
<th>分享方式</th>
<th>分享地址</th>
<th>提取密码</th>
<th>解压密码</th>
</tr>
<c:forEach items="${pageBean.lists}" var="item" varStatus="i">
<tr>
<td>${item.name}</td>
<td>${item.type}</td>
<td>${item.url}</td>
<td>${item.code}</td>
<td>${item.pwd}</td>
</tr>
</c:forEach>
</table>
<span>第${pageBean.currPage}/ ${pageBean.totalPage}页</span>
<span>
<c:if test="${pageBean.currPage > 1}">
<!-- ${pageContext.request.contextPath } 是JSP取得绝对路径的方法 -->
<a href="${pageContext.request.contextPath}/packet?currentPage=1">[首页]</a>
<a href="${pageContext.request.contextPath}/packet?currentPage=${pageBean.currPage-1}">[上一页]</a>
</c:if>
<c:if test="${pageBean.currPage < pageBean.totalPage}">
<a href="${pageContext.request.contextPath}/packet?currentPage=${pageBean.currPage+1}">[下一页]</a>
<a href="${pageContext.request.contextPath}/packet?currentPage=${pageBean.totalPage}">[尾页]</a>
</c:if>
</span>
</body>
</html>