分页工具

一、分页工具类


package com.ygr.usermanage.utils;


public class PageUtil {
	/**每页多少条数据*/
	private int pageSize = 10;
	/**总记录条数*/
	private int totalCount;   
	/**当前页*/
	private int currentPage;
	/**总页数*/
	private int pageCount;

	public PageUtil(int pageSize, int totalCount, int currentPage) {
		this.pageSize = pageSize;
		this.totalCount = totalCount;
		this.setCurrentPage(currentPage);
	}
	
	/**
	 * 当前页边界检查
	 * 不大不大于总页数,最小不小于一页
	 * @param currentPage
	 */
	public void setCurrentPage(int currentPage) {
		int activePage = currentPage <= 0 ? 1 : currentPage;
		activePage = activePage > getPageCount() ? getPageCount() : activePage;
		this.currentPage = activePage;
	}

	/**
	 * 计算总页数
	 * @return
	 */
	public int getPageCount() {
		pageCount = totalCount / pageSize;  // 26  /  10     2   
		int mod = totalCount % pageSize;    // 26  %  10     6   
		if (mod != 0) {
			pageCount++;   //3
		}
		return totalCount == 0 ? 1 : pageCount;
	}

	/**
	 *  获取开始记录序号
	 *  
	 *  每页显示10条记录
	 *  1页   0    0-9  
	 *  2页   10   10-19      
	 *  3页   20    20-29
	 *    .....
	 *  n页    (n-1)*10
	 *    
	 */
	public int getFromIndex() {
		return (currentPage - 1) * pageSize;
	}

	/**
	 * 结束记录序号
	 * @return
	 */
	public int getToIndex() {
		return Math.min(totalCount, currentPage * pageSize);
	}

	public int getPageSize() {
		return pageSize;
	}

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


二、持久层中的方法:

@Override
	public List<Car> getPageUserLists(int getFromIndex,int getPageSize) {

		List<Car> lists = getHibernateTemplate().execute(new HibernateCallback<List<Car>>() {
			@Override
			public List<Car> doInHibernate(Session session) throws HibernateException {
				Query query = session.createQuery("FROM Car ").setFirstResult(getFromIndex)
						.setMaxResults(getPageSize);
				List<Car> lists = (List<Car>) query.list();
				return lists;
			}
		});
		return lists;
		// 重点在于两个方法setFirstResult()和setMaxResults()查询数据库中位于这个两个id坐标之间的数据返回得到的一个数组,即为每个页面中显示的数据
		// setFirstResult()中的参数为,获取每个分页第一个数据的坐标位置,
		// setMaxResults()中的参数为每页显示多少条记录个数

	}

三、控制层中的代码:


@RequestMapping("/show")
	public String showAll(Integer pageNum, Map<String, Object> map, Model model) {
		int pageSize = 10 ;
		// 非空判断页面数,如果页面不为空赋值给currentPage
		if (pageNum != null && pageNum > 0) {
			currentPage = pageNum;
		}
		int count = carServer.getTotalCount();
		PageUtil pageUtil = new PageUtil(pageSize, count, currentPage);

		List<Car> carLists = carServer.getPageUserLists(pageUtil.getFromIndex(), pageUtil.getPageSize());

		map.put("carLists", carLists);
		model.addAttribute("currentPage", currentPage);
		model.addAttribute("totalPage", pageUtil.getPageCount());
		return "/list_car";

	}

四、jsp前端界面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
	// 获取请求的上下文
	String context = request.getContextPath();
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>汽车列表</title>
<script type="text/javascript">
// 当前第几页数据
var currentPage = ${currentPage};

// 总页数
var totalPage = ${totalPage};

function submitForm(actionUrl){
	window.location.href = actionUrl;
}

// 第一页
function firstPage(){
	if(currentPage == 1){
		alert("已经是第一页数据");
		return false;
	}else{
		submitForm("<%=context%>/show.do?pageNum=1");
		return true;
	}
}

// 下一页
function nextPage(){
	if(currentPage == totalPage){
		alert("已经是最后一页数据");
		return false;
	}else{
		submitForm("<%=context%>/show.do?pageNum=" + (currentPage+1));
		return true;
	}
}

// 上一页
function previousPage(){
	if(currentPage == 1){
		alert("已经是第一页数据");
		return false;
	}else{
		submitForm("<%=context%>/show.do?pageNum=" + (currentPage-1));
		return true;
	}
}

// 尾页
function lastPage(){
	if(currentPage == totalPage){
		alert("已经是最后一页数据");
		return false;
	}else{
		submitForm("<%=context%>/show.do?pageNum=${totalPage}");
			return true;
		}
	}
</script>
</head>
<body>
	<table width="100%" border="0" bgcolor="#cccccc">
		<tr>
			<td>车牌号</td>
			<td>车辆品牌/型号</td>
			<td>车主姓名</td>
			<td>车主电话</td>
			<td>车主地址</td>
			<td colspan="2">操作</td>
		</tr>

		<%
			String color = "";
			int c = 1;
		%>
		<c:forEach items="${carLists}" var="car">
			<%
				if (c == 1) {
						color = "#ffffff";
						c = 0;
					} else {
						color = "#f5f5f5";
						c = 1;
					}
			%>
			<tr bgcolor="<%=color%>">
				<td>${car.carNumber}</td>
				<td>${car.carName}</td>
				<td>${car.persenName}</td>
				<td>${car.telephone}</td>
				<td>${car.address}</td>
				<td><a href="./delete.do?id=${car.id}">删除</a></td>
				<td><a href="./update.do?id=${car.id}">修改</a></td>
			</tr>

		</c:forEach>
	</table>
	<br>
	<br>共${totalPage}页  当前第${currentPage}页  
	<a href="#" οnclick="firstPage();">首页</a>
	<a href="#" οnclick="previousPage();">上一页</a>
	<a href="#" οnclick="nextPage();">下一页</a>
	<a href="#" οnclick="lastPage();">尾页</a>
	<br>
	
	
</body>
</html>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB是一种NoSQL数据库,不同于传统关系型数据库,它采用了面向文档的数据存储方式。在MongoDB中没有内置的分页工具类,但我们可以通过编写自定义的分页工具类来满足分页查询的需求。 首先,我们需要一个方法来查询数据库中的文档并进行分页。我们可以使用MongoDB的find()方法来实现查询,并使用skip()和limit()方法来控制分页。skip()方法指定跳过的文档数量,limit()方法指定返回的文档数量。 在自定义分页工具类中,我们可以编写一个方法来执行分页查询。该方法有四个参数:页数、每页显示的数量、查询条件和排序方式。根据传入的参数,我们可以计算出需要跳过的文档数量和需要返回的文档数量,并使用find()、skip()和limit()方法执行查询。 除了基本的分页功能,我们还可以添加一些扩展功能,例如返回总页数和总记录数。我们可以通过计算数据库中的文档数量以及每页显示的数量,来得到总页数和总记录数。然后将这些信息添加到返回结果中,方便前端展示和操作。 需要注意的是,在执行分页查询时,我们需要根据查询条件和排序方式来调整和优化数据的查询和存储结构,以提高查询效率。例如,可以创建索引、使用合适的查询条件和排序方式等。 总而言之,MongoDB虽然没有内置的分页工具类,但我们可以通过编写自定义的分页工具类来实现分页查询。通过查询条件、页数和每页显示的数量,我们可以计算出需要跳过的文档数量和返回的文档数量,并使用MongoDB的find()、skip()和limit()方法来执行分页查询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值