jdbcTemplate实现分页功能

先看效果图:

jdbcTemplate实现分页功能_第1张图片

jdbcTemplate实现分页功能_第2张图片

分页工具类:

package com.kkrgwbj.bean;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

import java.util.List;

public class Pagination extends JdbcDaoSupport {

    public static final int NUMBERS_PER_PAGE = 10;
    //一页显示的记录数
    private int numPerPage;
    //记录总数
    private int totalRows;
    //总页数
    private int totalPages;
    //当前页码
    private int currentPage;
    //起始行数
    private int startIndex;
    //结束行数
    private int lastIndex;
    //结果集存放List
    private List resultList;
    //JdbcTemplate jTemplate
    private JdbcTemplate jTemplate;

    /**
     * 每页显示10条记录的构造函数,使用该函数必须先给Pagination设置currentPage,jTemplate初值
     *
     * @param sql Oracle语句
     */
    public Pagination(String sql) {
        if (jTemplate == null) {
            throw new IllegalArgumentException("com.deity.ranking.util.Pagination.jTemplate is null,please initial it first. ");
        } else if (sql.equals("")) {
            throw new IllegalArgumentException("com.deity.ranking.util.Pagination.sql is empty,please initial it first. ");
        }
        new Pagination(sql, currentPage, NUMBERS_PER_PAGE, jTemplate);
    }

    /**
     * 分页构造函数
     *
     * @param sql         根据传入的sql语句得到一些基本分页信息
     * @param currentPage 当前页
     * @param numPerPage  每页记录数
     * @param jTemplate   JdbcTemplate实例
     */
    public Pagination(String sql, int currentPage, int numPerPage, JdbcTemplate jTemplate) {
        if (jTemplate == null) {
            throw new IllegalArgumentException("com.deity.ranking.util.Pagination.jTemplate is null,please initial it first. ");
        } else if (sql == null || sql.equals("")) {
            throw new IllegalArgumentException("com.deity.ranking.util.Pagination.sql is empty,please initial it first. ");
        }
        //设置每页显示记录数
        setNumPerPage(numPerPage);
        //设置要显示的页数
        setCurrentPage(currentPage);
        //计算总记录数
        StringBuffer totalSQL = new StringBuffer(" SELECT count(*) FROM ( ");
        totalSQL.append(sql);
        totalSQL.append(" ) totalTable ");
        //给JdbcTemplate赋值
        setJdbcTemplate(jTemplate);
        //总记录数
        setTotalRows(getJdbcTemplate().queryForObject(totalSQL.toString(), Integer.class));
        //计算总页数
        setTotalPages();
        //计算起始行数
        setStartIndex();
        //计算结束行数
        setLastIndex();
        System.out.println("lastIndex=" + lastIndex);//////////////////

        //构造oracle数据库的分页语句
        /** StringBuffer paginationSQL = new StringBuffer(" SELECT * FROM ( ");
         paginationSQL.append(" SELECT temp.* ,ROWNUM num FROM ( ");
         paginationSQL.append(sql);
         paginationSQL.append(" ) temp where ROWNUM <= " + lastIndex);
         paginationSQL.append(" ) WHERE num > " + startIndex);
         */


        //装入结果集
        setResultList(getJdbcTemplate().queryForList(getMySQLPageSQL(sql, startIndex, numPerPage)));
    }


    /**
     * 构造MySQL数据分页SQL
     *
     * @param queryString
     * @param startIndex
     * @param pageSize
     * @return
     */
    public String getMySQLPageSQL(String queryString, Integer startIndex, Integer pageSize) {
        String result = "";
        if (null != startIndex && null != pageSize) {
            result = queryString + " limit " + startIndex + "," + pageSize;
        } else if (null != startIndex && null == pageSize) {
            result = queryString + " limit " + startIndex;
        } else {
            result = queryString;
        }
        return result;
    }


    public int getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        this.currentPage = currentPage;
    }

    public int getNumPerPage() {
        return numPerPage;
    }

    public void setNumPerPage(int numPerPage) {
        this.numPerPage = numPerPage;
    }

    public List getResultList() {
        return resultList;
    }

    public void setResultList(List resultList) {
        this.resultList = resultList;
    }

    public int getTotalPages() {
        return totalPages;
    }

    //计算总页数
    public void setTotalPages() {
        if (totalRows % numPerPage == 0) {
            this.totalPages = totalRows / numPerPage;
        } else {
            this.totalPages = (totalRows / numPerPage) + 1;
        }
    }

    public int getTotalRows() {
        return totalRows;
    }

    public void setTotalRows(int totalRows) {
        this.totalRows = totalRows;
    }

    public int getStartIndex() {
        return startIndex;
    }

    public void setStartIndex() {
        this.startIndex = (currentPage - 1) * numPerPage;
    }

    public int getLastIndex() {
        return lastIndex;
    }

    public JdbcTemplate getJTemplate() {
        return jTemplate;
    }

    public void setJTemplate(JdbcTemplate template) {
        jTemplate = template;
    }

    //计算结束时候的索引
    public void setLastIndex() {
        System.out.println("totalRows=" + totalRows);///////////
        System.out.println("numPerPage=" + numPerPage);///////////
        if (totalRows < numPerPage) {
            this.lastIndex = totalRows;
        } else if ((totalRows % numPerPage == 0) || (totalRows % numPerPage != 0 && currentPage < totalPages)) {
            this.lastIndex = currentPage * numPerPage;
        } else if (totalRows % numPerPage != 0 && currentPage == totalPages) {//最后一页
            this.lastIndex = totalRows;
        }
    }

}

dao:

/**
 *
 * @param pageNow 当前页
 * @param pageSize 每页显示条数
 * @return
 */
public Pagination queryUserList(Integer pageNow, Integer pageSize){
    String sql = "select * from tb_user";
    Pagination page=new Pagination(sql, pageNow, pageSize,this.jdbcTemplate);
    return page;
}

service:

public EasyUIResult queryUserList(Integer pageNow, Integer pageSize) {
    Pagination pagination= userDao.queryUserList(pageNow, pageSize);
    return new EasyUIResult(Long.valueOf(pagination.getTotalRows()), pagination.getResultList());
}

备注:由于使用了easyui,封装了个EasyUIResult,如果你的项目没有封装的话,直接在service层返回Pagination对象Pagination也可以。


你可能感兴趣的:(分页,JdbcTemplate,pagination)