zoukankan      html  css  js  c++  java
  • 数据库分页操作

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

    要实现的效果:

    前台页面

    <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);
    
  • 相关阅读:
    flask路由+视图
    flask基本使用1
    返回对象时字典化
    python3连接redis
    selected_related和prefetch_related
    django删除migrations导致初始化数据库失效
    vue添加拦截器(身份认证)以及cookie认证
    vue添加使用全局变量
    列表:动手试一试
    转来的字符串编辑方式
  • 原文地址:https://www.cnblogs.com/nieaojie625/p/13361132.html
Copyright © 2011-2022 走看看