jdbcTemplate實現分頁功能

先看效果圖:

分頁參數類:

package com.yadou.model;

/**
 * 分頁參數類
 * Created by lv on 16-5-12.
 */
public class PageParam {
    /**
     * 起始頁碼
     */
    private int page = 1;

    /**
     * 每頁顯示條數
     */
    private int limit;
    /**
     * 默認爲10條
     */
    public static final int PAGE_SIZE = 10;
    /**
     * 排序字段
     */
    private String sort;
    /**
     * asc or desc
     */
    private String dir;

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public String getSort() {
        return sort;
    }

    public void setSort(String sort) {
        this.sort = sort;
    }

    public String getDir() {
        return dir;
    }

    public void setDir(String dir) {
        this.dir = dir;
    }

    public int getLimit() {
        return limit;
    }

    public void setLimit(int limit) {
        this.limit = limit;
    }
}

分頁工具類:

package com.yadou.util;

import com.yadou.model.PageParam;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

import java.util.List;

public class Pagination extends JdbcDaoSupport {
    private static final Logger LOGGER = LogManager.getLogger(Pagination.class);
    //一頁顯示的記錄數
    private int pageSize;
    //記錄總數
    private int totalRows;
    //總頁數
    private int totalPages;
    //當前頁碼
    private int currentPage;
    //起始行數
    private int startIndex;
    //結束行數
    private int lastIndex;
    //結果集存放List
    private List resultList;
    //JdbcTemplate jTemplate
    private JdbcTemplate jTemplate;

    /**
     * 分頁構造函數
     *
     * @param sql       根據傳入的sql語句得到一些基本分頁信息
     * @param params    參數列表
     * @param pageParam 分頁參數對象
     * @param jTemplate JdbcTemplate實例
     */
    public Pagination(String sql, Object[] params, PageParam pageParam, 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. ");
        }
        //設置每頁顯示記錄數
        setPageSize(pageParam.getLimit());
        //設置要顯示的頁數
        setCurrentPage(pageParam.getPage());
        //計算總記錄數
        StringBuffer totalSQL = new StringBuffer(" SELECT count(*) FROM ( ");
        totalSQL.append(sql);
        totalSQL.append(" ) totalTable ");
        //給JdbcTemplate賦值
        setJdbcTemplate(jTemplate);
        //總記錄數
        setTotalRows(getJdbcTemplate().queryForObject(totalSQL.toString(), params, Integer.class));
        //計算總頁數
        setTotalPages();


        //計算起始行數
        setStartIndex();
        //計算結束行數
        setLastIndex();
        //裝入結果集
        setResultList(getJdbcTemplate().queryForList(getMySQLPageSQL(new StringBuilder(sql), pageParam), params));
    }


    /**
     * 構造MySQL數據分頁SQL
     *
     * @param queryString
     * @return
     */
    public String getMySQLPageSQL(StringBuilder queryString, PageParam pageParam) {
        String resultSql = null;
        if (pageParam != null && pageParam.getSort() != null && pageParam.getDir() != null) {
            queryString.append(" order by ").append(pageParam.getSort()).append(" ").append(pageParam.getDir());
        }
        if (0 != pageSize) {
            resultSql = queryString.append(" limit ").append(startIndex).append(",").append(pageSize).toString();
        } else {
            resultSql = queryString.toString();
        }
        LOGGER.info("page sql:{}", resultSql);
        return resultSql;
    }


    public int getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(int currentPage) {
        //如果當前頁碼<1,則默認加載第一頁數據
        if (currentPage < 0) {
            this.currentPage = 1;
        } else {
            this.currentPage = currentPage;
        }
    }


    public List getResultList() {
        return resultList;
    }

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

    public int getTotalPages() {
        return totalPages;
    }

    //計算總頁數
    public void setTotalPages() {
        if (pageSize == 0) {
            totalPages = 0;
        } else {
            if (totalRows % pageSize == 0) {
                this.totalPages = totalRows / pageSize;
            } else {
                this.totalPages = (totalRows / pageSize) + 1;
            }
        }
    }

    public int getTotalRows() {
        return totalRows;
    }

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

    public int getStartIndex() {
        return startIndex;
    }

    public void setStartIndex() {
        //如果總頁數>當前頁,則默認加載最後一頁
        if (currentPage > totalPages) {
            currentPage = totalPages;
        }
        this.startIndex = (currentPage - 1) * pageSize;
    }

    public int getLastIndex() {
        return lastIndex;
    }

    public JdbcTemplate getJTemplate() {
        return jTemplate;
    }

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

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    //計算結束時候的索引
    public void setLastIndex() {
        LOGGER.debug("totalRows={}", totalRows);///////////
        LOGGER.debug("pageSize={}", pageSize);///////////
        if (pageSize != 0) {
            if (totalRows < pageSize) {
                this.lastIndex = totalRows;
            } else if ((totalRows % pageSize == 0) || (totalRows % pageSize != 0 && currentPage < totalPages)) {
                this.lastIndex = currentPage * pageSize;
            } else if (totalRows % pageSize != 0 && currentPage == totalPages) {//最後一頁
                this.lastIndex = totalRows;
            }
        }
    }

}

程序中使用:

  public Pagination find(BGoodsVO bGoodsVO, PageParam pageParam) {
        List<Object> params = new ArrayList<>();
        StringBuilder sqlBuilder = new StringBuilder("SELECT\n" +
                "	g.*, s.shop_name\n" +
                "FROM\n" +
                "	b_goods g,\n" +
                "	b_shop s\n" +
                "WHERE\n" +
                "	g.shopid = s.ID\n");
        if (bGoodsVO != null) {
            if (bGoodsVO.getState() != null) {
                //狀態
                sqlBuilder.append(" and g.state = ?");
                params.add(bGoodsVO.getState());
            }
        }
        return new Pagination(sqlBuilder.toString(), params.toArray(), pageParam, super.getJdbcTemplate());
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章