dangsn
2024-12-03 d0ae279ff3b83358d1c07f4481a041c4ad335026
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
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;
    }
}