简单的分页查询——SSM框架

需求

对于多条数据对单个页面难以显示,所以分页处理很有必要,现在是大数据时代,我们会遇到越来越多的数据,一个界面不太可能把所有数据显示完全,而且不好看,使用起来查找信息不方便,所以需要分页查询

这里的例子,以全部查询和模糊查询结果为例
我们没有使用框架里的分页,而是自己创建一个简单的实体类实现。

代码

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>

结果展示

在这里插入图片描述

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值