数据库分页操作

分页操作有很广泛的应用,比如百度搜索时,上千万条的数据不可能一次性都显示出来,一方面是缓解服务器的压力,另一方面加载大量的数据也需要耗时很长时间,因此分页操作就很有必要了。

要实现的效果:

前台页面

<div class="pagin">
    <div class="message">
        共&nbsp;<i class="blue">${pageTool.totalCount}</i>条记录,
        当前显示第&nbsp;<i class="blue">${pageTool.currentPage}&nbsp;</i>页,
        共&nbsp;<i class="blue">${pageTool.pageSize }&nbsp;</i>页
    </div>
    <ul class="paginList">
        <li class="paginItem"><a
        <!-- 点击首页,调用查询方法,并传入当前页的页码 -->
                href="${pageContext.request.contextPath}/user?func=findAllUser&currentPage=1">首页</a></li>
        <li class="paginItem"><a
        <!-- 点击首页,调用查询方法,并传入pageTool中封装的lastPage -->
                href="${pageContext.request.contextPath}/user?func=findAllUser&currentPage=${pageTool.lastPage}">上一页</a>
        </li>
        <li class="paginItem"><a
        <!-- 点击首页,调用查询方法,并传入pageTool中封装的nextPage -->
                href="${pageContext.request.contextPath}/user?func=findAllUser&currentPage=${pageTool.nextPage}">下一页</a>
        </li>
        <li class="paginItem"><a
        <!-- 点击首页,调用查询方法,并传入pageTool中封装的pageSize -->
                href="${pageContext.request.contextPath}/user?func=findAllUser&currentPage=${pageTool.pageSize}">尾页</a>
        </li>
    </ul>
</div>

需要构建的工具类

在调用该工具类时,只需调用该工具类的构造方法即可。

传入的参数:

  • Integer totalCount 总记录数,数据库查询可得。
  • String currentPage 当前页,从前台获取request.getParameter
package com.example.bean;

public class PageTool {
    private Integer totalCount; //总记录数,从数据库中查询可得
    private Integer pageSize; //总页数,可计算得出
    private Integer currentPage; //当前页码,前台获取得到
    private Integer lastPage; //上一页,可计算得出
    private Integer nextPage;   //下一页,可计算得出
    private Integer startIndex; //每一页的起始下标,可计算得出
    private Integer pageCount; //每页数据量,固定值或者下拉选择动态获取

    public PageTool(Integer totalCount, String currentPage) {
        super();
        this.totalCount = totalCount;
        this.pageCount = 5;    //每页数据量,取固定值5
        //初始化当前页
        initCurrentPage(currentPage);
        //初始化总页数
        initPageSize();
        //初始化上一页
        initLastPage();
        //初始化下一页
        initNextPage();
        //初始化起始下标
        initStartindex();
    }

    //初始化起始下标,起始下标 = (当前页-1) * 每页显示几条记录
    private void initStartindex() {
        startIndex = (currentPage - 1) * pageCount;
    }

    //初始化下一页
    private void initNextPage() {
        if (currentPage == pageSize) {
        	//当前页如果是最后一页,那么下一页仍是最后一页
            nextPage = pageSize;
        } else {
        	//当前页不是最后一页,那么下一页=当前页+1
            nextPage = currentPage + 1;
        }
    }
	
    //初始化上一页
    private void initLastPage() {
        if (currentPage == 1) {
          	//当前页是第一页,上一页仍是第一页
            this.lastPage = 1;
        } else {
            //当前页不是第一页,上一页=当前页-1
            this.lastPage = currentPage - 1;
        }
    }

    //初始化总页数
    private void initPageSize() {
        //先求整页数,如果有余数的话在加上一页
        this.pageSize = this.totalCount / this.pageCount + (this.totalCount % this.pageCount == 0 ? 0 : 1);
    }

    //初始化当前页
    private void initCurrentPage(String currentPage) {
        if (currentPage == null || "".equals(currentPage)) {
            //说明首次进入该页面展示数据,没有点击任何按钮,获取到的参数为空,所以默认值设置为1
            this.currentPage = 1;
        } else {
            //说明点击了具体的某一页
            this.currentPage = Integer.valueOf(currentPage);
        }
    }

    public Integer getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(Integer totalCount) {
        this.totalCount = totalCount;
    }

    public Integer getPageSize() {
        return pageSize;
    }

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

    public Integer getCurrentPage() {
        return currentPage;
    }

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

    public Integer getLastPage() {
        return lastPage;
    }

    public void setLastPage(Integer lastPage) {
        this.lastPage = lastPage;
    }

    public Integer getNextPage() {
        return nextPage;
    }

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

    public Integer getStartIndex() {
        return startIndex;
    }

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

    public Integer getPageCount() {
        return pageCount;
    }

    public void setPageCount(Integer pageCount) {
        this.pageCount = pageCount;
    }
}

调用工具类的servlet

//构建分页对象
//获取totalCount,从数据库查询得到
Integer totalCount = userService.getUserCount();
//从前台获取的currentPage
String currentPage = request.getParameter("currentPage");
//调用工具类的构造方法
PageTool pageTool = new PageTool(totalCount, currentPage);

List<User> userList = userService.findAllUser(pageTool);
//将分页结果放入request域中
request.setAttribute("userList", userList);	
//将分页工具类对象放入request域中
request.setAttribute("pageTool", pageTool);
request.getRequestDispatcher("/admin/user_list.jsp").forward(request, response);
posted @ 2020-07-22 15:44  笑到不能自已  阅读(272)  评论(0编辑  收藏  举报