ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2.3 学习总结 之 分页查询

2020-02-03 11:01:41  阅读:242  来源: 互联网

标签:currentCount 分页 int 查询 条数 pageBean 2.3 currentPage public


一、相关知识:sql分页

1、格式:select  * from 表  limit  ?,?;

2、参数含义:第一个,开始索引,默认值为0,必须是正数。

        第二个,每页显示个数。

3、例子:select  * from products  limit  0,5; //第一页,每页显示5条商品记录。

      select  * from products  limit  5,5; //第二页,每页显示5条商品记录。

......

 二、功能实现

1、添加PageBean.java,提供构造方法,统一算法的编写

 

 

package com.itheima.vo;

import java.util.ArrayList;
import java.util.List;

import com.itheima.domain.Product;

public class PageBean<T> {
    
    //当前页
    private int currentPage;
    //当前页显示的条数(固定值)
    private int currentCount;
    //总条数
    private int totalCount;
    //总页数
    private int totalPage;
    //每页显示的数据
    private List<T> productList = new ArrayList<T>();
    
    
    public int getCurrentPage() {
        return currentPage;
    }
    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }
    public int getCurrentCount() {
        return currentCount;
    }
    public void setCurrentCount(int currentCount) {
        this.currentCount = currentCount;
    }
    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> getProductList() {
        return productList;
    }
    public void setProductList(List<T> productList) {
        this.productList = productList;
    }
    
}

2、编写 servlet 获取相关参数

ProductService service = new ProductService();
        
        //模拟当前是第一页
        String currentPageStr = request.getParameter("currentPage");
        if(currentPageStr==null) currentPageStr="1";
        int currentPage = Integer.parseInt(currentPageStr);
        //认为每页显示12条
        int currentCount = 12;
        
        PageBean<Product> pageBean = null;
        try {
            pageBean = service.findPageBean(currentPage,currentCount);
        } catch (SQLException e) {
            e.printStackTrace();
        }

3、编写 service 封装好 PageBean实体

//分页操作
    public PageBean findPageBean(int currentPage,int currentCount) throws SQLException  {
        
        ProductDao dao = new ProductDao();
        
        //目的:就是想办法封装一个PageBean 并返回
        PageBean pageBean = new PageBean();
        //1、当前页private int currentPage;
        pageBean.setCurrentPage(currentPage);
        //2、当前页显示的条数private int currentCount;
        pageBean.setCurrentCount(currentCount);
        //3、总条数private int totalCount;
        int totalCount = dao.getTotalCount();
        pageBean.setTotalCount(totalCount);
        //4、总页数private int totalPage;
        /*
         * 总条数        当前页显示的条数    总页数
         * 10        4                3
         * 11        4                3
         * 12        4                3
         * 13        4                4
         * 
         * 公式:总页数=Math.ceil(总条数/当前显示的条数)
         * 
         */
        int totalPage = (int) Math.ceil(1.0*totalCount/currentCount);
        pageBean.setTotalPage(totalPage);
        //5、每页显示的数据private List<T> productList = new ArrayList<T>();
        /*
         * 页数与limit起始索引的关系
         * 例如 每页显示4条
         * 页数        其实索引        每页显示条数
         * 1        0            4
         * 2        4            4
         * 3        8            4
         * 4        12            4
         * 
         * 索引index = (当前页数-1)*每页显示的条数
         * 
         */
        int index = (currentPage-1)*currentCount;
        
        List<Product> productList = dao.findProductListForPageBean(index,currentCount);
        pageBean.setProductList(productList);
        
        return pageBean;
    }

4、编写Dao,查询数据

//获得全部的商品条数
    public int getTotalCount() throws SQLException {
        QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
        String sql = "select count(*) from product";
        Long query = (Long) runner.query(sql, new ScalarHandler());
        return query.intValue();
    }

    //获得分页的商品数据
    public List<Product> findProductListForPageBean(int index,int currentCount) throws SQLException {
        QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource());
        String sql = "select * from product limit ?,?";
        return runner.query(sql, new BeanListHandler<Product>(Product.class), index,currentCount);
    }

5、将数据存到request域中,返回界面

request.setAttribute("pageBean", pageBean);
        
request.getRequestDispatcher("/product_list.jsp").forward(request, response);

6、分页信息管理

1)显示每一页

<!-- 显示每一页 -->
            <c:forEach begin="1" end="${pageBean.totalPage }" var="page">
                <!-- 判断是否是当前页 -->
                <c:if test="${page==pageBean.currentPage }">
                    <li class="active"><a href="javascript:void(0);">${page }</a></li>
                </c:if>
                <c:if test="${page!=pageBean.currentPage }">
                    <li><a href="${pageContext.request.contextPath}/pagingDisplay?cid=${cid}&currentPage=${page }">${page }</a></li>
                </c:if>
            </c:forEach>

 

 

2)上一页

<!-- 上一页 -->
            <c:if test="${pageBean.currentPage==1 }">
                <li class="disabled">
                    <a href="javascript:void(0);" aria-label="Previous">
                        <span aria-hidden="true">&laquo;</span>
                    </a>
                </li>
            </c:if>
            <c:if test="${pageBean.currentPage!=1 }">
                <li>
                    <a href="${pageContext.request.contextPath}/pagingDisplay?cid=${cid}&currentPage=${pageBean.currentPage-1 }" aria-label="Previous">
                        <span aria-hidden="true">&laquo;</span>
                    </a>
                </li>
            </c:if>

 

 

3)下一页

            <!-- 下一页 -->
            <c:if test="${pageBean.currentPage==pageBean.totalPage }">
                <li class="disabled">
                    <a href="javascript:void(0);" aria-label="Next"> 
                        <span aria-hidden="true">&raquo;</span>
                    </a>
                </li>
            </c:if>
            <c:if test="${pageBean.currentPage!=pageBean.totalPage }">
                <li>
                    <a href="${pageContext.request.contextPath}/pagingDisplay?cid=${cid}&currentPage=${pageBean.currentPage+1 }" aria-label="Next"> 
                        <span aria-hidden="true">&raquo;</span>
                    </a>
                </li>
            </c:if>

 

标签:currentCount,分页,int,查询,条数,pageBean,2.3,currentPage,public
来源: https://www.cnblogs.com/20183544-wangzhengshuai/p/12254639.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有