java实现分页查询

(转自文章https://blog.csdn.net/qq_30162219/article/details/86701957)

思路:假设数据库里的某张表的数据的条数是185条,我要实现的是一页显示10条,也就是说,展示完所有的数据需要19页,每一页的号是,1-10;11-20,22-31;

第一页是a,a+9,第二页就是(a+9)+1,((a+9)+1)+9…一直到(b+9)>185;

一.抽取页面模型和页码部分jsp

①按照下图红色选框中的内容抽取页面实体类
在这里插入图片描述`public class Page {
//基本属性
private int currentPage;//当前页数,由用户指定
private int pageSize = 5 ;//每页显示的条数,固定的
private int totalRecords;//总记录条数,数据库查出来的
private int totalPage;//总页数,计算出来的
private int startIndex;//每页开始记录的索引,计算出来的
private int prePage;//上一页
private int nextPage;//下一页
private int startPage;//开始页码
private int endPage;//结束页码

private List<T> list;//已经分好页的结果集,该list中只有10条记录

//点击页码要访问的url
private String url;

//要想使用我的分页,必须给我两个参数。一个是要看哪一页,另一个是总记录条数
public Page(int currentPage,int totalRecords,int pageSize){
	this.currentPage = currentPage;
	this.totalRecords = totalRecords;
	this.pageSize=pageSize;
	
	//计算查询记录的开始索引
	startIndex = (currentPage-1)*pageSize;
	
	//计算总页数
	totalPage = totalRecords%pageSize==0?(totalRecords/pageSize):(totalRecords/pageSize+1);
	
	//设置每页显示九个页码
	startPage = currentPage - 4; //5
	endPage = currentPage + 4;  //13
	
	//设置前一页与后一页
	prePage = currentPage-1;
	if(prePage<1){
		prePage = 1;
	}
	nextPage = currentPage+1;
	if(nextPage>totalPage){
		nextPage = totalPage;
	}
	
	//设置起始页码与结束页码,看看总页数够不够9页
	if(totalPage>9){
		//超过了9页
		if(startPage < 1){
			startPage = 1;
			endPage = startPage+8;
		}
		if(endPage > totalPage){
			endPage = totalPage;
			startPage = endPage-8;
		}
	}else{
		//不够9页
		startPage = 1;
		endPage = totalPage;
	}
}

public int getPrePage() {
	return prePage;
}

public void setPrePage(int prePage) {
	this.prePage = prePage;
}

public int getNextPage() {
	return nextPage;
}

public void setNextPage(int nextPage) {
	this.nextPage = nextPage;
}

public int getCurrentPage() {
	return currentPage;
}

public void setCurrentPage(int currentPage) {
	this.currentPage = currentPage;
}

public int getPageSize() {
	return pageSize;
}

public void setPageSize(int pageSize) {
	this.pageSize = pageSize;
}

public int getTotalRecords() {
	return totalRecords;
}

public void setTotalRecords(int totalRecords) {
	this.totalRecords = totalRecords;
}

public int getTotalPage() {
	return totalPage;
}

public void setTotalPage(int totalPage) {
	this.totalPage = totalPage;
}

public int getStartIndex() {
	return startIndex;
}

public void setStartIndex(int startIndex) {
	this.startIndex = startIndex;
}

public int getStartPage() {
	return startPage;
}

public void setStartPage(int startPage) {
	this.startPage = startPage;
}

public int getEndPage() {
	return endPage;
}

public void setEndPage(int endPage) {
	this.endPage = endPage;
}

public List<T> getList() {
	return list;
}

public void setList(List<T> list) {
	this.list = list;
}

public String getUrl() {
	return url;
}

public void setUrl(String url) {
	this.url = url;
}

}`

②.将底部页码内容放置在单独的一个jsp中

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
	<%--分页显示的开始 --%>
    	<div style="text-align:center">    		共${page.totalPage}/第${page.currentPage}<c:if test="${page.currentPage != 1 }">
	    		<a href="${pageContext.request.contextPath}/${page.url}&currentPage=1">首页</a>
	    		<a href="${pageContext.request.contextPath}/${page.url}&currentPage=${page.prePage}">上一页</a>
    		</c:if>
    		<%--显示的页码,使用forEach遍历显示的页面 --%>
    		<c:forEach begin="${page.startPage}" end="${page.endPage}" varStatus="i">
    			<c:if test="${i.index == page.currentPage }">
    				<span>${page.currentPage}</span>
    			</c:if>
    			<c:if test="${i.index != page.currentPage }">
    				 <a href="${pageContext.request.contextPath}/${page.url}&currentPage=${i.index}">${i.index}</a>
    			</c:if>
    		</c:forEach>
    		<c:if test="${page.currentPage != page.totalPage}">
	    		<a href="${pageContext.request.contextPath}/${page.url}&currentPage=${page.nextPage}">下一页</a>
	    		<a href="${pageContext.request.contextPath}/${page.url}&currentPage=${page.totalPage}">末页</a>
    		</c:if>
    		<input type="text" id="page" name="page" size="1"/><input type="button" value="前往" onclick="jump()" />
    		<script type="text/javascript">
    			function jump(){
    				var totalpage = ${page.totalPage};
    				var page = document.getElementById("page").value;
    				//判断输入的是一个数字
    				var reg =/^[1-9][0-9]{0,1}$/;
    				if(!reg.test(page)){
    					//不是一个有效数字
    					alert("请输入符合规定的数字");
    					return ;
    				}
    				//判断输入的数字不能大于总页数
    				if(parseInt(page)>parseInt(totalpage)){
    					//超过了总页数
    					alert("不能大于总页数");
    					return;
    				}
    				//转向分页显示的Servlet
    				window.location.href="${pageContext.request.contextPath}/${page.url}&currentPage="+page;
    			}
    		</script>
    	</div>
    	<%--分页显示的结束--%>

二.获得页面模型流程

①在业务层获取要访问的当前页数(currentPage)、记录总数(totalRecords)、每页显示记录数(pageSize)封装到一个Page中

②根据Page中的数据开始索引(startIndex)和每页显示记录数(pageSize)去查询数据库并返回list

③将list放入Page中并设置Page的Url属性作为页码的跳转路径

⑤将该Page返回web层并放入请求域中转发到数据显示页面进行读取

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值