package com.vci.starter.web.pagemodel; import org.apache.commons.lang3.StringUtils; import java.util.HashSet; import java.util.Set; /** * ExtJs,easyui,layui 分页帮助类 * * @author weidy * */ public class PageHelper implements java.io.Serializable { /** * 序列化 */ private static final long serialVersionUID = -588765760880887850L; /** * 当前页 */ private int page; // 当前页 /** * 排序字段 */ private String sort; // 排序字段 ---前端只支持使用一个字段来排序,但是后台实际可以使用多个字段来排序,所以可以使用逗号分割 /** * 排序类型 */ private String order; // asc/desc,如果有多个排序字段时,这里也需要用逗号分割,且与sort的位置对应 /** * 起始数据行数 */ private int start = 0; /** * 每页显示页数 */ private int limit = 25; //每页显示的条数 /** * 是否要支持显示总页数和总条数----在数据量巨大的情况下,可以不查询总数 */ private boolean queryTotal = true; /** * 排序的SQL */ private String ordersql ; /** * 表的昵称 */ private String nick; /** * 升序 */ public final String asc = "asc"; /** * 降序 */ public final String desc = "desc"; /** * 不使用表昵称的字段 */ private Set unNickField = new HashSet<>(); /** * 默认构造函数 */ public PageHelper(){ } /** * 构造函数,设置分页数 * @param limit 分页数 */ public PageHelper(int limit){ this.limit = limit; this.page = 1; } /** * 构造函数,设置分页数和是否查询总数 * @param limit 分页数 * @param queryTotal 查询总数 */ public PageHelper(int limit,boolean queryTotal){ this.limit = limit; this.queryTotal = queryTotal; } /** * 构造函数,这种升序的排序字段 * @param sort 升序的字段 */ public PageHelper(String sort){ this.sort = sort; this.limit = -1; this.order = "asc"; } /** * 构造函数,设置排序字段和排序方式 * @param sort 排序字段 * @param order 排序方式 */ public PageHelper(String sort, String order){ this.sort = sort; this.limit = -1; this.order = order; } /** * 构造函数,设置分页,排序字段和排序方式 * @param limit 分页数 * @param sort 排序字段 * @param order 排序方式 */ public PageHelper(int limit, String sort, String order){ this.limit = limit; this.sort = sort; this.order = order; } /** * 构造函数,设置分页,排序字段和排序方式 * @param limit 分页数 * @param page 当前页 * @param sort 排序字段 * @param order 排序方式 */ public PageHelper(int limit, int page, String sort, String order){ this.limit = limit; this.page = page; this.sort = sort; this.order = order; } /** * 获取当前页 * @return 当前页数 */ public int getPage() { return page; } /** * 设置当前页,会自动计算数据起始行数 * @param page 当前页 */ public void setPage(int page) { this.page = page; if(page>0&&this.limit>0){ start = (this.page-1)*this.limit; } } /** * 设置排序字段 * @param sort 排序字段 */ public void setSort(String sort) { this.sort = sort; } /** * 获取排序方式 * @return 排序方式 */ public String getOrder() { return order; } /** * 设置排序方式 * @param order 排序方式 */ public void setOrder(String order) { this.order = order; } /** * 获取起始数 * @return 行起始数 */ public int getStart() { if(this.limit <=0){ return 0; }else{ return (this.page-1)*this.limit + 1; } } /** * 是否查询总数 * @return true表示查询,默认为true */ public boolean isQueryTotal() { return queryTotal; } /** * 是否查询总数 * @param queryTotal 是否查询总数 */ public void setQueryTotal(boolean queryTotal) { this.queryTotal = queryTotal; } /** * 获取每页显示多少行 * @return 每页显示行数 */ public int getLimit() { return limit; } /** * 设置每页显示行数 * @param limit 每页显示行数 */ public void setLimit(int limit) { this.limit = limit; if(page>0&&this.limit>0){ start = (this.page-1)*this.limit + 1; } } /** * 增加排序 * @param sort 排序字段 * @param order 排序方式 */ public void addSort(String sort, String order){ this.setSort(StringUtils.isBlank(this.getSort())?sort:(this.getSort() + "," + sort) ); this.setOrder(StringUtils.isBlank(this.getOrder())?order:(this.getOrder() + "," + order)); } /** * 增加升序 * @param field 升序的字段 */ public void addAsc(String field){ this.addSort(field,asc); } /** * 在没有排序的时候才添加默认的升序排列字段 * @param field 默认的升序的字段 */ public void addDefaultAsc(String field){ if(StringUtils.isBlank(this.getSort()) && StringUtils.isBlank(this.getOrder())){ this.addAsc(field); } } /** * 在没有排序的时候才添加默认的降序排列字段 * @param field 默认的降序的字段 */ public void addDefaultDesc(String field){ if(StringUtils.isBlank(this.getSort()) && StringUtils.isBlank(this.getOrder())){ this.addDesc(field); } } /** * 增加降序 * @param field 降序的字段 */ public void addDesc(String field){ this.addSort(field,desc); } /** * 获取排序字段 * @return 排序字段 */ public String getSort() { return sort; } /** * 设置起始数 * @param start 起始数 */ public void setStart(int start) { this.start = start; } /** * 获取排序的SQL语句,在Hibernate里使用 * @return 排序的SQL */ public String getOrdersql() { if(ordersql == null || ordersql.trim().length() == 0){ if(sort !=null && sort.trim().length() >0 && order !=null && order.trim().length() > 0){ if(sort.indexOf(",") > -1){ String[] sortArray = sort.split(","); String[] orderArray = order.split(","); StringBuilder sb = new StringBuilder(); for(int i = 0 ; i < sortArray.length ; i ++){ if(StringUtils.isNotBlank(sortArray[i]) && orderArray.length > i && StringUtils.isNotBlank(orderArray[i])) { if(sortArray[i].indexOf(".")<0) { //不是参照 if(!unNickField.contains(sortArray[i].toLowerCase())) { sb.append(StringUtils.isBlank(this.getNick()) ? "" : (this.getNick() + ".")); } } sb.append(sortArray[i].toLowerCase()); sb.append(" "); sb.append(orderArray[i]); sb.append(","); } } ordersql = " order by " + sb.toString(); if(ordersql.endsWith(",")){ ordersql = ordersql.substring(0,ordersql.length()-1); } }else { ordersql = " order by " + sort + " " + order; } } } return ordersql; } /** * 获取排序的SQL语句,在Hibernate里使用 * @param nick 昵称 * @return 排序的SQL */ public String getOrderSql(String nick){ if(ordersql == null || ordersql.trim().length() == 0){ if(sort !=null && sort.trim().length() >0 && order !=null && order.trim().length() > 0){ if(sort.indexOf(",") > -1){ String[] sortArray = sort.split(","); String[] orderArray = order.split(","); StringBuilder sb = new StringBuilder(); for(int i = 0 ; i < sortArray.length ; i ++){ if(StringUtils.isNotBlank(sortArray[i]) && orderArray.length > i && StringUtils.isNotBlank(orderArray[i])) { if(sortArray[i].indexOf(".")<0) { //不是参照 sb.append(StringUtils.isBlank(nick) ? "" : (nick + ".")); } sb.append(sortArray[i].toLowerCase()); sb.append(" "); sb.append(orderArray[i]); sb.append(","); } } ordersql = " order by " + sb.toString(); if(ordersql.endsWith(",")){ ordersql = ordersql.substring(0,ordersql.length()-1); } }else { ordersql = " order by " + nick + "." + sort + " " + order; } } } return ordersql; } public String getNick() { return nick; } public void setNick(String nick) { this.nick = nick; } /** * 设置排序的字段 * @param ordersql 排序字段 */ public void setOrdersql(String ordersql) { this.ordersql = ordersql; } @Override public String toString() { return "PageHelper{" + "page=" + page + ", sort='" + sort + '\'' + ", order='" + order + '\'' + ", start=" + start + ", limit=" + limit + ", queryTotal=" + queryTotal + ", ordersql='" + ordersql + '\'' + ", nick='" + nick + '\'' + ", asc='" + asc + '\'' + ", desc='" + desc + '\'' + ", unNickField=" + unNickField + '}'; } public Set getUnNickField() { return unNickField; } public void setUnNickField(Set unNickField) { this.unNickField = unNickField; } }