java分页实现

首先是dataobject,项目是用的是SpringMVC
public class MbChannelExtensionDO  {
    private static final long serialVersionUID = 741231858441822688L;

    //========== properties ==========

	/**
	 * This property corresponds to db column <tt>ID</tt>.
	 */
	private String id;

	/**
	 * This property corresponds to db column <tt>BANK_NAME</tt>.
	 */
	private String bankName;

	/**
	 * This property corresponds to db column <tt>PRODUCT_TYPE</tt>.
	 */
	private String productType;

	/**
	 * This property corresponds to db column <tt>EXCHANGE_TYPE</tt>.
	 */
	private String exchangeType;

	/**
	 * This property corresponds to db column <tt>SIGN_VERIFY_ELE</tt>.
	 */
	private String signVerifyEle;

	/**
	 * This property corresponds to db column <tt>CHANNEL_ID</tt>.
	 */
	private String channelId;

	/**
	 * This property corresponds to db column <tt>GMT_CREATE</tt>.
	 */
	private Date gmtCreate;

	/**
	 * This property corresponds to db column <tt>CREATOR</tt>.
	 */
	private String creator;

	/**
	 * This property corresponds to db column <tt>GMT_MODIFIED</tt>.
	 */
	private Date gmtModified;

	/**
	 * This property corresponds to db column <tt>UPDATOR</tt>.
	 */
	private String updator;

	/**
	 * This property corresponds to db column <tt>STATUS</tt>.
	 */
	private String status;

    //========== getters and setters ==========

    /**
     * Getter method for property <tt>id</tt>.
     *
     * @return property value of id
     */
	public String getId() {
		return id;
	}
	
	/**
	 * Setter method for property <tt>id</tt>.
	 * 
	 * @param id value to be assigned to property id
     */
	public void setId(String id) {
		this.id = id;
	}

    /**
     * Getter method for property <tt>BANK_NAME</tt>.
     *
     * @return property value of bankName
     */
	public String getBankName() {
		return bankName;
	}
	
	/**
	 * Setter method for property <tt>BANK_NAME</tt>.
	 * 
	 * @param bankName value to be assigned to property bankName
     */
	public void setBankName(String bankName) {
		this.bankName = bankName;
	}

    /**
     * Getter method for property <tt>PRODUCT_TYPE</tt>.
     *
     * @return property value of productTYPE
     */
	public String getProductType() {
		return productType;
	}
	
	/**
	 * Setter method for property <tt>PRODUCT_TYPE</tt>.
	 * 
	 * @param productType value to be assigned to property productType
     */
	public void setProductType(String productType) {
		this.productType = productType;
	}

	/**
	 * Getter method for property <tt>SIGN_VERIFY_ELE</tt>.
	 *
	 * @return property value of signVerifyEle
	 */
	public String getSignVerifyEle() {
		return signVerifyEle;
	}

	/**
	 * Setter method for property <tt>SIGN_VERIFY_ELE</tt>.
	 *
	 * @param signVerifyEle value to be assigned to property signVerifyEle
	 */
	public void setSignVerifyEle(String signVerifyEle) {
		this.signVerifyEle = signVerifyEle;
	}

    /**
     * Getter method for property <tt>EXCHANGE_TYPE</tt>.
     *
     * @return property value of signVerifyEle
     */
    public String getExchangeType() {
        return exchangeType;
    }

    /**
     * Setter method for property <tt>EXCHANGE_TYPE</tt>.
     *
     * @param exchangeType value to be assigned to property exchangeType
     */
    public void setExchangeType(String exchangeType ) { this.exchangeType = exchangeType;}
    /**
     * Getter method for property <tt>channelId</tt>.
     *
     * @return property value of channelId
     */
	public String getChannelId() {
		return channelId;
	}
	
	/**
	 * Setter method for property <tt>channelId</tt>.
	 * 
	 * @param channelId value to be assigned to property channelId
     */
	public void setChannelId(String channelId) {
		this.channelId = channelId;
	}

    /**
     * Getter method for property <tt>gmtCreate</tt>.
     *
     * @return property value of gmtCreate
     */
	public Date getGmtCreate() {
		return gmtCreate;
	}
	
	/**
	 * Setter method for property <tt>gmtCreate</tt>.
	 * 
	 * @param gmtCreate value to be assigned to property gmtCreate
     */
	public void setGmtCreate(Date gmtCreate) {
		this.gmtCreate = gmtCreate;
	}

    /**
     * Getter method for property <tt>creator</tt>.
     *
     * @return property value of creator
     */
	public String getCreator() {
		return creator;
	}
	
	/**
	 * Setter method for property <tt>creator</tt>.
	 * 
	 * @param creator value to be assigned to property creator
     */
	public void setCreator(String creator) {
		this.creator = creator;
	}

    /**
     * Getter method for property <tt>gmtModified</tt>.
     *
     * @return property value of gmtModified
     */
	public Date getGmtModified() {
		return gmtModified;
	}
	
	/**
	 * Setter method for property <tt>gmtModified</tt>.
	 * 
	 * @param gmtModified value to be assigned to property gmtModified
     */
	public void setGmtModified(Date gmtModified) {
		this.gmtModified = gmtModified;
	}

    /**
     * Getter method for property <tt>updator</tt>.
     *
     * @return property value of updator
     */
	public String getUpdator() {
		return updator;
	}
	
	/**
	 * Setter method for property <tt>updator</tt>.
	 * 
	 * @param updator value to be assigned to property updator
     */
	public void setUpdator(String updator) {
		this.updator = updator;
	}

    /**
     * Getter method for property <tt>status</tt>.
     *
     * @return property value of status
     */
	public String getStatus() {
		return status;
	}
	
	/**
	 * Setter method for property <tt>status</tt>.
	 * 
	 * @param status value to be assigned to property status
     */
	public void setStatus(String status) {
		this.status = status;
	}


接着是使用分页的Page类

public class PageDO {
    /**
     * 总条数
     */
    private int totalNumber;
    /**
     * 当前第几页
     */
    private int currentPage;
    /**
     * 总页数
     */
    private int totalPage;
    /**
     * 每页显示条数
     */
    private int pageNumber = 10;

    /**
     * 依据当前对象中属性值计算并设置相关属性值
     */
    public void count() {
        // 计算总页数
        int totalPageTemp = this.totalNumber / this.pageNumber;
        int plus = (this.totalNumber % this.pageNumber) == 0 ?

0 : 1; totalPageTemp = totalPageTemp + plus; if(totalPageTemp <= 0) { totalPageTemp = 1; } this.totalPage = totalPageTemp; // 设置当前页数 // 总页数小于当前页数,应将当前页数设置为总页数 if(this.totalPage < this.currentPage) { this.currentPage = this.totalPage; } // 当前页数小于1设置为1 if(this.currentPage < 1) { this.currentPage = 1; } } public int getTotalNumber() { return totalNumber; } public void setTotalNumber(int totalNumber) { this.totalNumber = totalNumber; this.count(); } public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public int getPageNumber() { return pageNumber; } public void setPageNumber(int pageNumber) { this.pageNumber = pageNumber; this.count(); } }


DAO层实现分页的两个方法

 /**
     *  select  <tt>MbChannelExtensionDO</tt> object by page to DB table <tt>MB_CHANNEL_EXTENSION</tt>, return primary key
     *
     *  <p>
     *  The sql statement for this operation is <br>
     *  <tt>select * from MB_CHANNEL_EXTENSION where id not in(select id from MB_CHANNEL_EXTENSION
     *  where rownum<=(PAGESIZE*(CURRENTPAGE-1))) and rownum<=PAGESIZE order by id; </tt>
     *
     *	@param page,mbChannelExtension
     *	@return List<MbChannelExtensionDO>
     *	@throws DataAccessException
     */
    @Override
    public List<MbChannelExtensionDO> getMbChannelExtensionByPage(MbChannelExtensionDO mbChannelExtensionDO,PageDO page) throws DataAccessException {
        if (page == null) {
            throw new IllegalArgumentException("Can't select by a null page.");
        }
        Map map=new HashMap();
        map.put("page",page);
        map.put("mbChannelExtension",mbChannelExtensionDO);
        return getSqlMapClientTemplate().queryForList("MS-MB-CHANNEL-EXTENSION-SELECT-BY-PAGE", map);
    }

    @Override
    public int countOfMbChannelExtension(MbChannelExtensionDO mbChannelExtensionDO ) throws DataAccessException {

        int count=(Integer)getSqlMapClientTemplate().queryForObject("MS-MB-CHANNEL-EXTENSION-COUNT",mbChannelExtensionDO);
        return count;
    }


下面是mybatis的mapping文件 
</pre><pre name="code" class="html" style="font-size: 11.8181819915771px;"><select id="MS-MB-CHANNEL-EXTENSION-SELECT-BY-PAGE" parameterClass="java.util.Map" resultMap="RM-MB-CHANNEL-EXTENSION">
        select
            *
        from
            MB_CHANNEL_EXTENSION
        where
            id
        not in
        (
            select
                id
            from
                MB_CHANNEL_EXTENSION
            where 1=1

                AND
                rownum
                  <![CDATA[ <=]]>
                (
                    #page.pageNumber#*(#page.currentPage#-1)
                )
        )
        <dynamic>
            <isNotEmpty prepend="AND" property="mbChannelExtension.bankName">
                BANK_NAME=#mbChannelExtension.bankName#
            </isNotEmpty>
            <isNotEmpty prepend="AND" property="mbChannelExtension.productType">
                PRODUCT_TYPE=#mbChannelExtension.productType#
            </isNotEmpty>
            <isNotEmpty prepend="AND" property="mbChannelExtension.exchangeType">
                EXCHANGE_TYPE=#mbChannelExtension.exchangeType#
            </isNotEmpty>
        </dynamic>
        and rownum
        <![CDATA[ <=]]> #page.pageNumber#
        order by
            id
    </select>


    <select id="MS-MB-CHANNEL-EXTENSION-COUNT" resultClass="java.lang.Integer">
        select count(ID)
        from
        MB_CHANNEL_EXTENSION
        where 1=1
        <dynamic>
            <isNotEmpty prepend="AND" property="bankName">
                BANK_NAME=#bankName#
            </isNotEmpty>
            <isNotEmpty prepend="AND" property="productType">
                PRODUCT_TYPE=#productType#
            </isNotEmpty>
            <isNotEmpty prepend="AND" property="exchangeType">
                EXCHANGE_TYPE=#exchangeType#
            </isNotEmpty>
        </dynamic>
<p>    </select></p><div>
</div>

下面是controller层

  @RequestMapping("/channlExtension")
    public String selectCustomer(MbChannelExtensionDO customer,PageDO page,
                                 HttpServletRequest request) {
        if(page==null){
            page=new PageDO();
            page.setPageNumber(1);
            page.count();
        }
        MbChannelExtensionDO channelExtension = new MbChannelExtensionDO();
        channelExtension = customer;
        page.setTotalNumber(channelExtensionService.countOfMbChannelExtension(customer));
        this.tcustomerList  = this.channelExtensionService.getMbChannelExtensionByPage(customer,page);
        request.setAttribute("tcustomerList", tcustomerList);
        request.setAttribute("page",page);
        request.setAttribute("channelExtension",channelExtension);
        return "/channlExtension/channlExtension";
    }

前端html和js
<form name ="frm" id="mainForm" method="post" action="<%=request.getContextPath()%>/channlExtension.html">
            <div class='page fix' style="text-align: end;margin:5px 30px 20px 30px;">
                共 <b>${page.totalNumber}</b> 条
                <c:if test="${page.currentPage != 1}">
                    <a href="javascript:changeCurrentPage('1')" class='first'>首页</a>
                    <a href="javascript:changeCurrentPage('${page.currentPage-1}')" class='pre'>上一页</a>
                </c:if>
                当前第<span>${page.currentPage}/${page.totalPage}</span>页
                <c:if test="${page.currentPage != page.totalPage}">
                    <a href="javascript:changeCurrentPage('${page.currentPage+1}')" class='next'>下一页</a>
                    <a href="javascript:changeCurrentPage('${page.totalPage}')" class='last'>末页</a>
                </c:if>
                跳至 <input id="currentPageText" name="currentPage" type='text' value='${page.currentPage}' class='allInput w28' /> 页 
                <a href="javascript:changeCurrentPage($('#currentPageText').val())" class='go'>GO</a>
            </div>
</form>

<script type="text/javascript">
    function changeCurrentPage(currentPage) {
        $("#currentPageText").val(currentPage);
        $("#mainForm").submit();
    }
</script>

原文地址:https://www.cnblogs.com/jzssuanfa/p/7353545.html