分页是每个项目都会用到的,所以它的重要性不言而喻,这里整理一套封装好的分页工具,在项目中直接使用就好。
一、分页分析

首先应该了解分页查询语句(MySQL为例):
select * from table_test
LIMIT  -- 分页查询关键字
0,     -- 从第几条数据开始查询数据【(当前页数-1)* 每页显示的条数】
10;    -- 每页显示的条数
页面显示的分页工具的形式:
**当前页 1/10 首页 上一页  每页显示 10  下一页 末页**

看到前面的信息可以总结出需要往后台传递的数据是:当前页,每页显示条数

二、封装工具类

这里的工具类其实首先是一个分页的bean,因为我们要传递的数据不是一个,所以用一个PageBean封装分页属性:
public class PageBean<T>{
    private int currentPage = 1; //当前页,默认是第一页
    private int pageCount = 10;  //每页显示的条数,默认是10条
    private int totalPage;       //总页数
    private int totalCount;      //数据总条数
    private List<T> pageData;    //查询到的数据对象集合

    //省略getter、setter方法
    ……
    //主要说一下总页数的getter方法
    public int getTotalPage(){
        //计算公式:总记录数%每页显示条数=0时
        if(totalCount % pageCount == 0){
            totalPage = totalCount / pageCount;
        }else{
            //计算公式:总记录数%每页显示条数!=0时
            totalPage = totalCount / pageCount + 1;
        }
        return totalPage;
    }
}

三、使用分页工具

封装好PageBean之后就可以在项目中直接使用了,在Dao层封装分页查询的方法,传入PageBean就可以了
public void getAll(PageBean<T> pb){
    //为PageBean对象的属性赋值

    //1、查询总记录数,放入totalCount
    int totalCount = this.getTotalCount();
    pb.setTotalCount(totalCount);
    //2、处理当当前页是第一页和最后一页时的问题
    if(pb.getCurrentPage() <= 0){
        //如果当前页不大于0,显示第一页
        pb.setCurrentPage(1);
    }else if(pb.getCurrentPage() > pb.getTotalPage()){
        //如果当前页大于最大页数,显示最后一页
        pb.setCurrentPage(pb.getTotalPage());
    }

    //获取当前页,查询数据
    int currentPage = pb.getCurrentPage();
    //查询的起始行
    int index = (currentPage - 1) * pb.getPageCount();
    //每页显示的条数
    int count = pb.getPageCount();

    //查询的sql语句
    String sql = "select * from table_test LIMIT ?,?";
    try{
        //使用dbutil组件
        //创建QueryRunner对象
        QueryRunner qr = new QueryRunner();
        //查询当前页数据
        //QueryRunner对象的query方法参数说明:
        //第一个:查询的sql
        //第二个:查询的返回结果,直接使用接口中声明好的BeanListHandler就行,注意是泛型,具体到业务的时候指定具体的泛型类型
        //第三个:这个参数是一个可变参数,就是传入sql语句中占位符的实参
        List<T> pageData = qr.query(sql, new BeanListHandler<T>(T.class),index,count);
        pb.setPageData(pageData);
    }catch(Exception e){
        throw new RuntimeException();
    }
}

//查询总记录数的方法
public int getTotalCount(){
    String sql = "select count(*) from table_test";
    try{
        //这里使用DbUtils组件,如果有不清楚的可以+QQ:3393055745
        //创建QueryRunner对象
        QueryRunner qr = new QueryRunner();
        //QueryRunner的query方法传入的两个参数:
        //第一个:查询sql
        //第二个:使用接口封装好的对象就可以,这里使用的对象的意思是返回查询结果的第一条数据
        Long count = qr.query(sql,new ScalarHandler<Long>());
        return count.intValue();
    }catch(Exception e){
        throw new RuntimeException();
    }
}

查询方法封装好之后就是从前台页面传数据了,剩下的就是jsp和后台数据的交互了,就不介绍了。。。