zoukankan      html  css  js  c++  java
  • Page.java

    Page.java

    package com.xxx.common.util;
    
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.commons.lang.StringUtils;
    
    /**
     * 
     * @author fym
     * 
     * @param <T>
     */
    public class Page<T> implements Serializable {
    
        /**
         * 
         */
        private static final long serialVersionUID = -3355049623232655831L;
        // -- 公共变量 --//
        public static final String ASC = "asc";
        public static final String DESC = "desc";
    
        // -- 分页参数 --//
        protected int pageNo = 1;
        protected int pageSize = -1;
        protected String orderBy = null;
        protected String order = null;
        protected boolean autoCount = true;
    
        // -- 返回结果 --//
        protected List<T> result = new ArrayList<T>();
        protected long totalCount = -1;
    
        // -- 构造函数 --//
        public Page() {
        }
    
        public Page(int pageSize) {
            this.pageSize = pageSize;
        }
    
        // -- 分页参数访问函数 --//
        /**
         * 获得当前页的页号,序号从1开始,默认为1.
         */
        public int getPageNo() {
            return pageNo;
        }
    
        /**
         * 设置当前页的页号,序号从1开始,低于1时自动调整为1.
         */
        public void setPageNo(final int pageNo) {
            this.pageNo = pageNo;
    
            if (pageNo < 1) {
                this.pageNo = 1;
            }
        }
    
        /**
         * 返回Page对象自身的setPageNo函数,可用于连续设置。
         */
        public Page<T> pageNo(final int thePageNo) {
            setPageNo(thePageNo);
            return this;
        }
    
        /**
         * 获得每页的记录数量, 默认为-1.
         */
        public int getPageSize() {
            return pageSize;
        }
    
        /**
         * 设置每页的记录数量.
         */
        public void setPageSize(final int pageSize) {
            this.pageSize = pageSize;
        }
    
        /**
         * 返回Page对象自身的setPageSize函数,可用于连续设置。
         */
        public Page<T> pageSize(final int thePageSize) {
            setPageSize(thePageSize);
            return this;
        }
    
        /**
         * 根据pageNo和pageSize计算当前页第一条记录在总结果集中的位置,序号从1开始.
         */
        public int getFirst() {
            return ((pageNo - 1) * pageSize) + 1;
        }
    
        /**
         * 获得排序字段,无默认值. 多个排序字段时用','分隔.
         */
        public String getOrderBy() {
            return orderBy;
        }
    
        /**
         * 设置排序字段,多个排序字段时用','分隔.
         */
        public void setOrderBy(final String orderBy) {
            this.orderBy = orderBy;
        }
    
        /**
         * 返回Page对象自身的setOrderBy函数,可用于连续设置。
         */
        public Page<T> orderBy(final String theOrderBy) {
            setOrderBy(theOrderBy);
            return this;
        }
    
        /**
         * 获得排序方向, 无默认值.
         */
        public String getOrder() {
            return order;
        }
    
        /**
         * 设置排序方式向.
         * 
         * @param order
         *            可选值为desc或asc,多个排序字段时用','分隔.
         */
        public void setOrder(final String order) {
            String lowcaseOrder = StringUtils.lowerCase(order);
    
            // 检查order字符串的合法值
            String[] orders = StringUtils.split(lowcaseOrder, ',');
            for (String orderStr : orders) {
                if (!StringUtils.equals(DESC, orderStr)
                        && !StringUtils.equals(ASC, orderStr)) {
                    throw new IllegalArgumentException("排序方向" + orderStr + "不是合法值");
                }
            }
    
            this.order = lowcaseOrder;
        }
    
        /**
         * 返回Page对象自身的setOrder函数,可用于连续设置。
         */
        public Page<T> order(final String theOrder) {
            setOrder(theOrder);
            return this;
        }
    
        /**
         * 是否已设置排序字段,无默认值.
         */
        public boolean isOrderBySetted() {
            return (StringUtils.isNotBlank(orderBy) && StringUtils
                    .isNotBlank(order));
        }
    
        /**
         * 获得查询对象时是否先自动执行count查询获取总记录数, 默认为false.
         */
        public boolean isAutoCount() {
            return autoCount;
        }
    
        /**
         * 设置查询对象时是否自动先执行count查询获取总记录数.
         */
        public void setAutoCount(final boolean autoCount) {
            this.autoCount = autoCount;
        }
    
        /**
         * 返回Page对象自身的setAutoCount函数,可用于连续设置。
         */
        public Page<T> autoCount(final boolean theAutoCount) {
            setAutoCount(theAutoCount);
            return this;
        }
    
        // -- 访问查询结果函数 --//
    
        /**
         * 获得页内的记录列表.
         */
        public List<T> getResult() {
            return result;
        }
    
        /**
         * 设置页内的记录列表.
         */
        public void setResult(final List<T> result) {
            this.result = result;
        }
    
        /**
         * 获得总记录数, 默认值为-1.
         */
        public long getTotalCount() {
            return totalCount;
        }
    
        /**
         * 设置总记录数.
         */
        public void setTotalCount(final long totalCount) {
            this.totalCount = totalCount;
        }
    
        /**
         * 根据pageSize与totalCount计算总页数, 默认值为-1.
         */
        public long getTotalPages() {
            if (totalCount < 0) {
                return -1;
            }
    
            long count = totalCount / pageSize;
            if (totalCount % pageSize > 0) {
                count++;
            }
            return count;
        }
    
        /**
         * 是否还有下一页.
         */
        public boolean isHasNext() {
            return (pageNo + 1 <= getTotalPages());
        }
    
        /**
         * 取得下页的页号, 序号从1开始. 当前页为尾页时仍返回尾页序号.
         */
        public int getNextPage() {
            if (isHasNext()) {
                return pageNo + 1;
            } else {
                return pageNo;
            }
        }
    
        /**
         * 是否还有上一页.
         */
        public boolean isHasPre() {
            return (pageNo - 1 >= 1);
        }
    
        /**
         * 取得上页的页号, 序号从1开始. 当前页为首页时返回首页序号.
         */
        public int getPrePage() {
            if (isHasPre()) {
                return pageNo - 1;
            } else {
                return pageNo;
            }
        }
    }
    在追随技术的道路上,十年如一日~
  • 相关阅读:
    《2018面向对象程序设计(java)课程学习进度条》
    201771010110-孔维滢-实验四 软件项目案例分析
    201771010110-孔维滢 实验三 结对项目—《西北师范大学疫情防控信息系统》项目报告
    201771010110-孔维滢 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告
    201771010110-孔维滢 实验一 软件工程准备—<初步了解软件工程>
    孔维滢《面向对象程序设计(java)》课程学习总结
    孔维滢 20171010110《面向对象程序设计(java)》第十七周学习总结
    201771010110孔维滢《面向对象程序设计Java》第十六周实验总结
    孔维滢 20171010110《面向对象程序设计(java)》第十五周学习总结
    孔维滢 201771010110《面向对象程序设计(java)》第十四周学习总结
  • 原文地址:https://www.cnblogs.com/iamcui/p/5045745.html
Copyright © 2011-2022 走看看