java分页

分页查询
问题:什么是分页,为什么使用分页?
分页就是将数据以多页去展示,使用分页可以提高客户的感受。

分页分类:
    1.物理分页
        只从数据库中查询出当前页的数据。
        优点:不占用很多内存
        缺点:效率比较低
    2.逻辑分页
        从数据库中将所有记录查询出业,存储到内存中,要想展示当前页
        数据,直接从内存中获取。
        优点:效率高
        缺点:占用内存比较高

    在java开发领域,我们使用的比较多的是物理分页。
        物理分页的实现:

            1.直接使用jdbc完成
                使用滚动结果集.  优点:跨数据库。缺点:性能低。
            2.使用数据库本身提供的分页操作.
                会使用每一个数据库特定的分页函数,优点:性能高  缺点:不能跨数据库。

                mysql:limit
                sqlservlet:top
                oracle:rownum

    介绍limit使用.
        select * from 表 limit m,n;
        m:代表的是从第几条开始  注意:它是从0开始记录.
        n:代表查询几条记录.

        示例:分页音,每页显示6条,要查询第2页的数据.

            select * from 表  limit  (页码-1)*每页条数,每页条数;

------------------------------------------------------------------------------
分页分析:
    1.页码  默认第一页  
    2.每页条数   人为定义
    3.总条数   select count(*) from 表
    4.总页数    总页数=总条数%每页条数==0?总条数/每页条数:总条数/每页条数+1
                总页数=Math.ceil(总条数*1.0/每页条数);

    5.当前页的数据  List<?>----->select * from 表  limit  (页码-1)*每页条数,每页条数;    

----------------------------------------------------------------------------------      
分页代码实现:

    1.在success.jsp页面上
            <a href="${pageContext.request.contextPath}/findAllByPage">查看所有客户信息(分页展示)</a><br>

    2.创建CustomerFindAllByPageServlet完成分页

            问题:要向页面携带的数据有很多,不仅是要展示的数据,例如:页码,总页数等,都需要携带到页面上,怎样处理?
                解决方案:可以创建一个分页Bean,在这个Bean中封装所有关于分页相关的数据.

    3.在showCustomerByPage.jsp页面上添加
            <a href="/day20_1/findAllByPage?pageNum=1">首页</a>&nbsp;&nbsp;&nbsp;

            <a href="/day20_1/findAllByPage?pageNum=${pb.pageNum-1}">上一页</a>&nbsp;&nbsp;&nbsp;

            <a href="/day20_1/findAllByPage?pageNum=${pb.pageNum+1 }">下一页</a>&nbsp;&nbsp;&nbsp;

            <a href="/day20_1/findAllByPage?pageNum=${pb.totalPage }">尾页</a>&nbsp;&nbsp;&nbsp;

        在CustomerFindAllByPageServlet中处理请求参数 pageNum
            int pageNum = 1;
            String _pageNum = request.getParameter("pageNum");
            if (_pageNum != null) {
                pageNum = Integer.parseInt(_pageNum);
            }

        问题:怎样控制上一页,下一页。
            条件判断就可以解决.
            <c:if test="${pb.pageNum==1}">
                上一页&nbsp;&nbsp;&nbsp;
            </c:if>
            <c:if test="${pb.pageNum!=1}">
                <a href="/day20_1/findAllByPage?pageNum=${pb.pageNum-1}">上一页</a>&nbsp;&nbsp;&nbsp;
            </c:if>

            <c:if test="${pb.pageNum==pb.totalPage}">
                下一页&nbsp;&nbsp;&nbsp;
            </c:if>
            <c:if test="${pb.pageNum!=pb.totalPage}">
                <a href="/day20_1/findAllByPage?pageNum=${pb.pageNum+1 }">下一页</a>&nbsp;&nbsp;&nbsp;
            </c:if>
--------------------------------------------------------------------
分页扩展:
    1.设定每页显示条数          
        1.在showCustomerByPage.jsp页面上添加一个<select>
                    <select name="currentPage" onchange="changeCurrentPage(this.value);">
                        <option>--请选择每页条数--</option>
                        <option value="5">5</option>
                        <option value="10">10</option>
                        <option value="20">20</option>
                    </select>

                function changeCurrentPage(value){      
                    location.href="/day20_1/findAllByPage?currentPage="+value;
                };  

        2.在首页,上一页,下一页,尾页的连接上也要添加每页显示条数。
            例如:
            <a href="/day20_1/findAllByPage?pageNum=1&currentPage=${pb.currentPage}">首页</a>

    ------------------------------------
    2.关于页码显示

        <c:forEach begin="1" end="${pb.totalPage}" var="n" step="1">
            <a href="/day20_1/findAllByPage?pageNum=${n}&currentPage=${pb.currentPage}">第${n}页</a>&nbsp;&nbsp;
        </c:forEach>

        问题:如果页码比较多怎样处理?
            可以限定页码数,例如:前5后4。

            这样做,页面的判断条件比较多,可以使用自定义标签。

            可以在自定义标签中通过java代码来解决判断操作。如果直接在页面上,使用<c:if>代码太乱。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值