查询如果需要分页时,我们会在controller层接口的入参,带上自定义的PageQuery.
public ResponseResult<PageResult<Student>> getVip(HttpServletRequest request, @RequestBody PageQuery<Student> query) { .............. .............. .............. }
PageResult如下:
import java.util.ArrayList;
import java.util.List;
public class PageResult<T> {
// 封装响应到客户端的集合
private List<T> results = new ArrayList<>();
// 封装数据库的总记录数
private long count;
public PageResult(List<T> results, long count) {
super();
this.results = results;
this.count = count;
}
public PageResult() {
super();
}
public List<T> getResults() {
return results;
}
public void setResults(List<T> results) {
this.results = results;
}
public long getCount() {
return count;
}
public void setCount(long count) {
this.count = count;
}
}
PageQuery如下:
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PageQuery<T> {
private static Pattern COLUMN_CHAR_PATTERN = Pattern.compile("[A-Z]([a-z\\d]+)?");
private List<String> sorts = new ArrayList();
private static final List<String> SORT_ORDER = Arrays.asList("asc", "desc");
private String order = "desc";
// 每页显示数量
private int count = 10;
// 当前页码
private int page = 0;
private String accessStatus;
public String getAccessStatus() {
return accessStatus;
}
public void setAccessStatus(String accessStatus) {
this.accessStatus = accessStatus;
}
@NotNull(groups = {PageGroup.class}, message = "分页查询对象不能为空")
private T params;
public PageQuery() {
}
public PageQuery(int count, int page, T params) {
this.count = count;
this.page = page;
this.params = params;
}
public String getOrder() {
if (null == order || "".equals(order.trim())) {
return "desc";
}
return order;
}
public void setOrder(String order) {
if (order != null && SORT_ORDER.indexOf(order) < 0) {
order = "desc";
}
this.order = order;
}
public T getParams() {
return params;
}
public void setParams(T params) {
this.params = params;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public List<String> getSorts() {
return sorts;
}
public void setSorts(List<String> sorts) {
List<String> list = new ArrayList(sorts.size());
for (String sort : sorts) {
String result = String.valueOf(sort.charAt(0)).toUpperCase().concat(sort.substring(1));
StringBuilder sb = new StringBuilder();
Matcher matcher = COLUMN_CHAR_PATTERN.matcher(result);
while (matcher.find()) {
String word = matcher.group();
sb.append(word.toLowerCase());
sb.append(matcher.end() == result.length() ? "" : "_");
}
list.add(sb.toString().toUpperCase());
}
sorts.clear();
sorts.addAll(list);
}
private String dayPlanId;
public String getDayPlanId() {
return dayPlanId;
}
public void setDayPlanId(String dayPlanId) {
this.dayPlanId = dayPlanId;
}
@Override
public String toString() {
return "PageQuery{" +
"sorts=" + sorts +
", order='" + order + '\'' +
", count=" + count +
", page=" + page +
", accessStatus='" + accessStatus + '\'' +
", params=" + params +
", dayPlanId='" + dayPlanId + '\'' +
'}';
}
}