ewen321 发表于 2015-07-10 15:39

mysql limit 服务端分页

一个简单好用的mysql 分页Java类
分页类package com.cy.driver.common.mybatis.pager;

import com.cy.driver.common.constants.Constants;

/**
* 类描述: mysql分页 适用于服务端
* 提供两个构造函数
*      1.默认分页大小
*      2.自定义分页大小
*
* 作者 yanst 创建时间: 2015-5-7 下午7:54:49
*/
public class HelpPage {
   
    private long limitOneValue;//limit 第一个参数的值-1 说明传过来的数据不合法;
   
    private long totalPages;//总页数

    private long currentPage;//当前页
   
    privatelong countNumbers;//总条数
   
    private int pageSize=Constants.PAGE_SIZE;//分页大小
   
    public HelpPage(long currentPage,
            long countNumbers, int pageSize) {
      this.pageSize = pageSize;
      this.countNumbers = countNumbers;
      this.currentPage = currentPage;
      this.totalPages = getTatalPages(countNumbers, pageSize);
      this.limitOneValue = getLimitOneValue(currentPage, countNumbers, totalPages,pageSize);
    }
    public HelpPage(long currentPage,
            long countNumbers) {
      this.pageSize = getPageSize();
      this.countNumbers = countNumbers;
      this.currentPage = currentPage;
      this.totalPages = getTatalPages(countNumbers, pageSize);
      this.limitOneValue = getLimitOneValue(currentPage, countNumbers, totalPages,pageSize);
    }
   
    /**
   * 获取总页数 (页数从0 开始)
   *
   * @param orderCounts
   *            总条数
   * @return 总页数
   */
    private long getTatalPages(long countNumbers,int pageSize) {
      long totalPages = 0;
      if (countNumbers <= pageSize) {
            totalPages = 0;
      }
      if (countNumbers % pageSize == 0) {// 页数刚好是条数的总倍数
            totalPages = (countNumbers / pageSize) - 1;
      } else {
            totalPages = (countNumbers / pageSize);// 页数不是总条数的倍数
      }
      return totalPages;
    }

    /**
   * mysql limit ?,? 获取一个问号的值
   * @param currentPage当前页
   * @param countNumbers总条数
   * @param tatalPages总页数
   *
   */
    private long getLimitOneValue(long currentPage, long countNumbers,
            long totalPages,int pageSize) {
         
      if (!isParameterLegitimacy(currentPage, countNumbers, pageSize)) {// 总页数小于 0 当前也超过总页数 当前页小于 0
            return -1;//不合法的分页参数校验
      }
      if (totalPages == 0) {// 如果就一页那么则 limit 第一个参数则为0;
            return 0;
      }
      long limtiStartNum = 0;
      if (currentPage <= totalPages) {
            limtiStartNum = (currentPage) * pageSize;
      }
      return limtiStartNum;
    }
   
    /**
   * 判断用户传过来的值是否合法
   * @param currentPage当前页
   * @param countNumbers总条数
   * @param pageSize 页数大小
   *
   */
    public boolean isParameterLegitimacy(long currentPage, long countNumbers,int pageSize) {
      long totalPages = getTatalPages(countNumbers, pageSize);
      if (totalPages < 0 || currentPage > totalPages || currentPage < 0) {// 总页数小于 0 当前页超过总页数 当前页小于 0
            return false;// 不合法的分页参数校验
      }
      return true;
    }
   
    public long getLimitOneValue() {
      return limitOneValue;
    }

    public void setLimitOneValue(long limitOneValue) {
      this.limitOneValue = limitOneValue;
    }

    public long getTotalPages() {
      return totalPages;
    }

    public void setTotalPages(long totalPages) {
      this.totalPages = totalPages;
    }

    public long getCurrentPage() {
      return currentPage;
    }

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

    public long getCountNumbers() {
      return countNumbers;
    }

    public void setCountNumbers(long countNumbers) {
      this.countNumbers = countNumbers;
    }

    public int getPageSize() {
      return pageSize;
    }

    public void setPageSize(int pageSize) {
      this.pageSize = pageSize;
    }
   
    public static void main(String[] args) {
      HelpPage hp = new HelpPage(11, 122,11);
      System.out.println("总条数:"+hp.getCountNumbers());
      System.out.println("当前页:"+hp.getCurrentPage());
      System.out.println("limit第一个参数:"+hp.getLimitOneValue());
      System.out.println("页数大小:"+hp.getPageSize());
      System.out.println("总页数:"+hp.getTotalPages());
         
    }
}
页: [1]
查看完整版本: mysql limit 服务端分页