[Java] 一種好的JAVA分頁實現


喃都不說了,貼代碼,意思都在代碼里面了
 

 

Page.java  //分頁類。定義分頁字段信息,供前台頁面使用

package com.core.common;

import java.util.List;

public class Page<T> {

 

private int pageIndex;//當前頁

private int pageSize;//每頁條數

private int totalCount;//符合查詢條件總條數

private List<T> pageData;//符合查詢條件的列表_注意這里是泛型

private int startRow;//數據庫起始記錄指針

private int totalPage;//總頁數

 

public Page(int pageIndex, int pageSize){

this.pageIndex = pageIndex <= 0 ? 1 : pageIndex;

this.pageSize = pageSize <= 0 ? 10 : pageSize;

}

 

public int getPageIndex() {

return pageIndex;

}

 

public void setPageIndex(int pageIndex) {

this.pageIndex = pageIndex;

}

 

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 List<T> getPageData() {

return pageData;

}

 

public void setPageData(List<T> pageData) {

this.pageData = pageData;

}

 

public int getStartRow() {

startRow = (pageIndex-1) * pageSize;

return startRow;

}

 

public int getTotalPage() {

totalPage = (int) Math.ceil(totalCount/Double.parseDouble(String.valueOf(pageSize)));

return totalPage;

}

 

 

}

 

//分頁過程————controller

 @RequestMapping(value = {"/order/list"})

//page當前頁

//model 查詢參數實體

public ModelAndView get_orders(Integer page,B2cOrderModel model){

        ModelAndView mv = new ModelAndView();

        mv.setViewName("/order_list");

        

//傳遞參數分別是:當前頁,每頁條數,查詢參數

        Page<B2cOrderModel> pageData = orderService.getOrders(getPageIndex(page), ConstantUtil.Page.PAGE_NUM, model);

       

        mv.addObject("pageData", pageData.getPageData());//列表

        mv.addObject("totalCount", pageData.getTotalCount());//總條數

        mv.addObject("totalPage", pageData.getTotalPage());//總頁數

        mv.addObject("currentPage", page);//當前頁

        mv.addObject("pageNav", PageNavUtil.getBluePageNavHtml(getPageIndex(page),

ConstantUtil.Page.PAGE_NUM, pageData.getTotalCount(), ConstantUtil.Page.NAV_NUM));//分頁導航

        return mv;

}

 

//分頁過程————service

@Override

    public Page<B2cOrderModel> getOrders(Integer pageIndex, int pageNum, B2cOrderModel model)

    {

        Page<B2cOrderModel> page = new Page<B2cOrderModel>(pageIndex, pageNum); 

 

        //創建查詢條件對象

        CriteriaCondition condition = new CriteriaCondition();//封裝查詢條件的類

        condition.setDistinct(false);

        condition.setStart(page.getStartRow());

        condition.setPageSize(pageNum);

        condition.setOrderByClause(" CREATED_DT DESC");

        

        condition.put("postName", model.getPostName());

        condition.put("postContactPhone", model.getPostContactPhone());

        

        //查詢符合條件的總條數和列表

        int totalCount = b2cOrderSourceDao.countByCondition(condition.getCondition());

        List<B2cOrderModel> pageData = b2cOrderSourceDao.selectByCondition(condition);

        

        //設置分頁信息

        page.setTotalCount(totalCount);

        page.setPageData(pageData);

        

        //返回分頁信息對象

        return page;

}

 

 

//分頁過程————mybatis語句

 

查詢條數

<select id="countByCondition" parameterType="java.util.Map" resultType="java.lang.Integer">

select count(*) from 表

<include refid="Base_Where_B2cOrder" />

</select>

 

查詢列表

<select id="selectByCondition" resultMap="Base_Result_B2cOrder" parameterType="com.core.common.CriteriaCondition">

select

<if test="distinct">

distinct

</if>

<include refid="Base_Column_B2cOrder" />

from b2c_order

<include refid="Base_Where_B2cOrder" />

<if test=" null!= orderByClause">

order by #{orderByClause}

</if>

<if test="null!=start and null!=pageSize">

limit #{start}, #{pageSize}

</if>

</select>

 

//結果映射列

<resultMap id="Base_Result_B2cOrder" type="com.source.model.B2cOrderModel">

        <result property="model參數名" column="對應的數據庫字段"/>

</resultMap>

 

//字段列

<sql id="Base_Column_B2cOrder">

需要查詢出的數據庫字段        

</sql>

//查詢條件

<sql id="Base_Where_B2cOrder">

    <trim prefix="where" prefixOverrides="and|or">

    	<if test="null!=condition">

        	<if test="null!=condition.參數字段名 and ''!=condition.參數字段名"> 

        	and 數據庫字段名= #{condition.參數字段名}

        	</if>

        	</if>

        </trim>

</sql>

 

//分頁過程---查詢條件封裝對象

CriteriaCondition

import java.util.HashMap;

/**

 * 公用條件查詢類

 */

public class CriteriaCondition

{

    /**

     * 存放條件查詢值

     */

    Map<String, Object> condition;

    

    /**

     * 是否相異

     */

    boolean distinct;

    

    /**

     * 排序字段

     */

    String orderByClause;

    

    /**

     * 分頁起始頁

     */

    Integer start;

    

    /**

     * 分頁數值

     */

    Integer pageSize;

    

    public CriteriaCondition()

    {

        super();

        condition = new HashMap<String, Object>();

    }

    

    public CriteriaCondition(String orderByClause, Integer start, Integer pageSize)

    {

        this.distinct = true;

        this.orderByClause = orderByClause;

        this.start = start;

        this.pageSize = pageSize;

        condition = new HashMap<String, Object>();

    }

    

    public CriteriaCondition(boolean distinct, String orderByClause, Integer start, Integer pageSize)

    {

        this.distinct = distinct;

        this.orderByClause = orderByClause;

        this.start = start;

        this.pageSize = pageSize;

        condition = new HashMap<String, Object>();

    }

    

    public CriteriaCondition put(String condition, Object value)

    {

        this.condition.put(condition, value);

        return (CriteriaCondition)this;

    }

    

    public Map<String, Object> getCondition()

    {

        return condition;

    }

    

    public void setDistinct(boolean distinct)

    {

        this.distinct = distinct;

    }

    

    public void setOrderByClause(String orderByClause)

    {

        this.orderByClause = orderByClause;

    }

    

    public void setStart(Integer start)

    {

        this.start = start;

    }

    

    public void setPageSize(Integer pageSize)

    {

        this.pageSize = pageSize;

    }

    

}

 

//構造前台分頁顯示

public class PageNavUtil

{

    

    public static String getBluePageNavHtml(int currentPage, int pageSize, int totalRows, int showNums)

    {

        

        StringBuilder pageNavHtml = new StringBuilder();

        

        if (showNums < 1)

        {

            showNums = 5;

        }

        

        // 計算總頁數

        int totalPage = (int)Math.ceil(totalRows / Double.parseDouble(String.valueOf(pageSize)));

        

        // 計算中間頁碼數字

        int midNum = (int)Math.ceil(Double.parseDouble(String.valueOf(showNums)) / 2);

        

        int beginNum = currentPage <= midNum ? 1 : currentPage - midNum + 1;

        

        int endNum = beginNum + showNums - 1;

        

        if (endNum > totalPage)

        {

            endNum = totalPage;

        }

        

        // 至少有1頁以上 才顯示分頁導航

        if (totalPage > 1)

        {

            

            // 需要顯示 首頁

            if (currentPage > 1)

            {

                pageNavHtml.append("<a href='?page=1'> 首頁</a>");

                

            }

            

            // 如果有上一頁

            if (currentPage > beginNum)

            {

                pageNavHtml.append("<a href='?page=" + (currentPage - 1) + "'> < </a>");

                

            }

            else

            {

                pageNavHtml.append("<a href='javascript:void(0)' class='disabled'> < </a>");

            }

            

            for (int i = beginNum; i <= endNum; i++)

            {

                if (i == currentPage)

                {

                    pageNavHtml.append("<a href='javascript:void(0)' class='this'>" + currentPage + "</a>");

                }

                else

                {

                    pageNavHtml.append("<a href='?page=" + i + "'>" + i + "</a>");

                    

                }

                

            }

            

            // 如果有下一頁

            if (currentPage < endNum)

            {

                pageNavHtml.append("<a href='?page=" + (currentPage + 1) + "'> > </a>");

                

            }

            else

            {

                pageNavHtml.append("<a href='javascript:void(0)' class='disabled'> > </a>");

            }

            

            // 需要顯示 尾頁

            if (currentPage < totalPage)

            {

                pageNavHtml.append("<a href='?page=" + totalPage + "'>尾頁</a>");

            }

            

        }

        

        return pageNavHtml.toString();

        

    }

    

    public static String getPageNavHtml(int currentPage, int pageSize, int totalRows, int showNums)

    {

        

        StringBuilder pageNavHtml = new StringBuilder();

        

        if (showNums < 1)

        {

            showNums = 5;

        }

        

        // 計算總頁數

        int totalPage = (int)Math.ceil(totalRows / Double.parseDouble(String.valueOf(pageSize)));

        

        // 計算中間頁碼數字

        int midNum = (int)Math.ceil(Double.parseDouble(String.valueOf(showNums)) / 2);

        

        int beginNum = currentPage <= midNum ? 1 : currentPage - midNum + 1;

        

        int endNum = beginNum + showNums - 1;

        

        if (endNum > totalPage)

        {

            endNum = totalPage;

        }

        

        // 至少有1頁以上 才顯示分頁導航

        if (totalPage > 1)

        {

            

            // 需要顯示 首頁

            if (currentPage > 1)

            {

                pageNavHtml.append("<a href='?page=1'> 首頁</a>");

                

            }

            

            // 如果有上一頁

            if (currentPage > beginNum)

            {

                pageNavHtml.append("<a href='?page=" + (currentPage - 1) + "'> < </a>");

                

            }

            else

            {

                pageNavHtml.append("<span class='disabled'> < </span>");

            }

            

            for (int i = beginNum; i <= endNum; i++)

            {

                if (i == currentPage)

                {

                    pageNavHtml.append("<span class='current'>" + currentPage + "</span>");

                }

                else

                {

                    pageNavHtml.append("<a href='?page=" + i + "'>" + i + "</a>");

                    

                }

                

            }

            

            // 如果有下一頁

            if (currentPage < endNum)

            {

                pageNavHtml.append("<a href='?page=" + (currentPage + 1) + "'> > </a>");

                

            }

            else

            {

                pageNavHtml.append("<span class='disabled'> > </span>");

            }

            

            // 需要顯示 尾頁

            if (currentPage < totalPage)

            {

                pageNavHtml.append("<a href='?page=" + totalPage + "'>尾頁</a>");

            }

            

        }

        

        return pageNavHtml.toString();

        

    }

    

}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM