SSM實現分頁查詢

前言

分頁基本上是我們項目中所必須的功能,當數據量過大時,可能會導致各種各樣的問題發生,例如:服務器資源被耗盡,因數據傳輸量過大而使處理超時,等等。最終都會導致查詢無法完成。解決這個問題的一個策略就是“分頁查詢”,也就是說不要一次性查詢所有的數據,每次只查詢一“頁“的數據。這樣分批次地進行處理,可以呈現出很好的用戶體驗,對服務器資源的消耗也不大。本文主要是使用limit來實現分頁的查詢。

 實現

1、分頁工具類

package com.inchlifc.util;

import java.util.List;

/**
 * @author 小小漁夫
 * @description 分頁實體類
 */
public class PageBean<T> {

    private int currPage;//當前頁數
    private int pageSize;//每頁顯示的記錄數
    private int totalCount;//總記錄數
    private int totalPage;//總頁數
    private List<T> lists;//每頁的顯示的數據

    public PageBean() {
        super();
    }

    public int getCurrPage() {
        return currPage;
    }

    public void setCurrPage(int currPage) {
        this.currPage = currPage;
    }

    public int getPageSize() {
        return pageSize;
    }

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

    public int getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(int totalCount) {
        this.totalCount = totalCount;
    }

    public int getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }

    public List<T> getLists() {
        return lists;
    }

    public void setLists(List<T> lists) {
        this.lists = lists;
    }

}

2、mapper層

 <select id="selectInStockList" resultType="com.inchlifc.entity.InStock">
      SELECT * FROM in_stock ORDER BY createTime desc
      <if test="pageStart!=null and pageSize!=null">
          limit #{pageStart},#{pageSize}
      </if>
</select>

3、Dao層

/**
* 分頁查詢所有信息
*
* @param pageStart 頁數
* @param pageSize  每頁顯示條數
* @return
*/
List<InStock> selectInStockList(@Param("pageStart") int pageStart, @Param("pageSize") int pageSize);

4、service層

/**
* 分頁查詢所有信息
*
* @return
*/
public PageBean<InStock> findAllInStock(int pageStart) {
    PageBean<InStock> pageBean = new PageBean<InStock>();
    pageBean.setCurrPage(pageStart);

    pageBean.setPageSize(10);

    //封裝總記錄數
    int totalCount = inStockDao.inStockCountAll();
    pageBean.setTotalCount(totalCount);

    //封裝總頁數
    double tc = totalCount;
    Double num = Math.ceil(tc / 10);//向上取整
    pageBean.setTotalPage(num.intValue());

    //封裝每頁顯示的數據
    List<InStock> lists = inStockDao.selectInStockList((pageStart - 1) * 10, 10);
    pageBean.setLists(lists);
    return pageBean;
}

5、controller層

/**
* 分頁查詢所有信息
* @param currentPage 當前頁數
* @param model model
* @param session 會話
* @return
*/
@RequestMapping(value = "/list", method = RequestMethod.GET)
@ResponseBody
private ModelAndView getInStockList(@RequestParam(value = "currentPage", defaultValue = "1", required = false) int currentPage, Model model, HttpSession session) {
    ModelAndView mv = new ModelAndView();
    //獲取當前登錄用戶名
    String currentUserName = (String) session.getAttribute("userName");
    if (!currentUserName.equals("engine")) {
        mv.setViewName("permission");
        return mv;
    }
    mv.addObject("stockList", inStockService.findAllInStock(currentPage));
    mv.setViewName("inStockList");
    return mv;
}

6、顯示頁面

<ul style="font-size: large;text-align: center">
        <span>第${requestScope.stockList.currPage }/ ${requestScope.stockList.totalPage}頁</span>
        <span>總記錄數:${requestScope.stockList.totalCount }  每頁顯示:${requestScope.stockList.pageSize}</span>
        <span>
            <c:if test="${requestScope.stockList.currPage != 1}">
                <a href="<%=basePath%>inStock/list?currentPage=1">[首頁]</a>
                <a href="<%=basePath%>inStock/list?currentPage=${requestScope.stockList.currPage-1}">[上一頁]</a>
            </c:if>

            <c:if test="${requestScope.stockList.currPage != requestScope.stockList.totalPage}">
                <a href="<%=basePath%>inStock/list?currentPage=${requestScope.stockList.currPage+1}">[下一頁]</a>
                <a href="<%=basePath%>inStock/list?currentPage=${requestScope.stockList.totalPage}">[尾頁]</a>
            </c:if>
        </span>
</ul>

7、結果顯示

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