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<String> 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<String> getUnNickField() {
|
return unNickField;
|
}
|
|
public void setUnNickField(Set<String> unNickField) {
|
this.unNickField = unNickField;
|
}
|
}
|