Java分页的三种方法

来源:互联网 发布:ubuntu引导没有win10 编辑:程序博客网 时间:2024/06/05 20:39

前段时间在博客学习了web分页方法,所以在此写一篇学习笔记进行记录总结。

1.Java代码分页

我学习第一种方法的博客:
http://blog.csdn.net/sdtvyyb_007/article/details/49933171?locationNum=2
1.1首先,需要一个分页的工具类。

package com.entity;public class PageUtil {    private int pageSize;// 每页显示的条数    private int total;// 总共的条数    private int currentPage;// 当前页面    private int totalPage;//总页数    public PageUtil(int pageSize, int total, int currentPage) {        this.pageSize = pageSize;        this.total = total;        totalPage = getPageCount();        setCurrentPage(currentPage);    }    // 构造方法    public PageUtil(int pageSize, int total) {        this(pageSize, total, 1);        totalPage = getPageCount();    }    // 总页数    public int getPageCount() {        int size = total / pageSize;// 总条数/每页显示的条数=总页数        int mod = total % pageSize;// 最后一页的条数        if (mod != 0)            size++;        return size;    }    // 起始下标    public int getFromIndex() {        // System.out.println("from index:"+(currentPage-1) * pageSize);        return (currentPage - 1) * pageSize;    }    // 结束下标    public int getToIndex() {        // System.out.println("to index:"+Math.min(recordCount, currentPage *        // pageSize));        return Math.min(total, currentPage * pageSize);    }    // 得到当前页    public int getCurrentPage() {        return currentPage;    }    // 设置当前页    public void setCurrentPage(int currentPage) {        int validPage = currentPage <= 0 ? 1 : currentPage;        validPage = validPage > getPageCount() ? getPageCount() : validPage;        this.currentPage = validPage;    }    // 得到每页显示的条数    public int getPageSize() {        return pageSize;    }    // 设置每页显示的条数    public void setPageSize(int pageSize) {        this.pageSize = pageSize;    }    // 得到总共的条数    public int getTotal() {        return total;    }    // 设置总共的条数    public void setTotal(int total) {        this.total = total;    }    // 设置总页数    public int getTotalPage() {        return totalPage;    }    // 得到总页数    public void setTotalPage(int totalPage) {        this.totalPage = totalPage;    }}

通过该类,就可以分页的信息了。

1.2获取需要显示的列表,并进行分页。

        String pageString=request.getParameter("page");        String cidString=request.getParameter("cid");        int cid=Integer.parseInt(cidString);        int currentPage=1;//当前页设置为1        if(pageString!=null)        {               currentPage=Integer.parseInt(pageString);        }        //获取漫画信息        Cartoon cartoon=cartoonService.selectCartoonById(cid);        //在设置分页,每页显示10条,总条数,当前页        PageUtil pUtil = new PageUtil(10, cartoonService.countCartoonItemById(cid), currentPage);        //获取Item列表        List<CartoonItem> list=cartoonService.selectCartoonItemById(cid);        //列表截断        List<CartoonItem> pageList=list.subList(pUtil.getFromIndex(), pUtil.getToIndex());        request.setAttribute("cartoon", cartoon);        request.setAttribute("pUtil", pUtil);        request.setAttribute("pageList", pageList);

通过Java代码进行分页,需要把所有信息获取出来(select * from table),然后通过subList(pUtil.getFromIndex(), pUtil.getToIndex())方法,截取当前页的信息。

1.3显示分页信息

  <body>    <%PageUtil pUtil=(PageUtil)request.getAttribute("pUtil"); %>    <% int lastPage=pUtil.getCurrentPage()-1; %>    <% int nextPage=pUtil.getCurrentPage()+1; %>        记录总数${pUtil.total }条 当前页/总页数${pUtil.currentPage }  /${pUtil.totalPage }每页显示${pUtil.pageSize }条   <% List<CartoonItem> pageList=(List)request.getAttribute("pageList"); %><table ><tr><th>章节</th><th>标题</th></tr><%for(CartoonItem ci:pageList){request.setAttribute("ci",ci);%>  <tr><td>第${ci.getCha_num() }话</td> <td><a href="${ci.getUrl() }" target="_blank">${ci.getCha_name() }</a></td></tr> <%} %></table><a href="cartoon/getCartoon?cid=${cartoon.cid }&&page=1">首页</a>   <a href="cartoon/getCartoon?cid=${cartoon.cid }&&page=<%=lastPage %>">上页</a>    <a href="cartoon/getCartoon?cid=${cartoon.cid }&&page=<%=nextPage %>">下页</a>   <a href="cartoon/getCartoon?cid=${cartoon.cid }&&page=${pUtil.totalPage } ">末页</a>  <br>  <a href="">返回首页</a>   </body>

这是一个测试用的jsp页面。

最后附上一张效果图。
这里写图片描述

2.MySQL语句分页

这是我MySQL数据库中的一个表:
这里写图片描述

通过一个带limit的查询语句可以限制查询条数。
limit 起始下标,显示条数

SELECT * FROM cartoon_website.cartoon limit 0,5;

这里写图片描述
这里起始下标和显示条数为0和5只是一个举例,在实际的程序中就需要通过PageUtil的对象来进行控制了。

3.ORACLE分页
我学习于:
http://blog.csdn.net/anxpp/article/details/51534006

该博客写的很详细,在这里我就简单的写一下。

ORACLE分页需要通过rownum进行分页控制。

select * from    (select rownum,* from table) t1where t1.rownum between 起始下标 and 终止下标

最后说一下优缺点。
通过Java代码来进行分页,是最简单直接的方法。但是这种方法的缺点也是非常的明显的,那就是你需要把所有数据都查询出来,当数据量太大时结果可想而知,所以推荐使用2和3的方法进行分页,也就是直接通过SQL语句进行分页。