package com.gdpu.zzy.util;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.util.*;
import java.util.function.Function;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
* 列表分页、排序、搜索通用接收参数封装
* Created by wangfan on 2019-04-26 10:34
*/
public class PageParam<T> extends Page<T> {
private static final String FILED_PAGE = "page"; // 第几页参数名称
private static final String FILED_LIMIT = "limit"; // 每页显示数量参数名称
private static final String FILED_SORT = "sort"; // 排序字段参数名称
private static final String FILED_ORDER = "order"; // 排序方式参数名称
private static final String VALUE_ORDER_ASC = "asc"; // 表示升序的值
private static final String VALUE_ORDER_DESC = "desc"; // 表示降序的值
private static final Pattern HUMP_PATTERN = Pattern.compile("[A-Z]"); // 驼峰转下划线正则匹配
/**
* 除分页、排序外的其他参数
*/
private Map<String, Object> pageData;
/**
* 是否把字段名称驼峰转下划线
*/
private boolean needToLine = true;
public PageParam() {
super();
}
public PageParam(HttpServletRequest request) {
init(request);
}
public PageParam(HttpServletRequest request, boolean needToLine) {
setNeedToLine(needToLine);
init(request);
}
public boolean isNeedToLine() {
return needToLine;
}
public PageParam<T> setNeedToLine(boolean needToLine) {
this.needToLine = needToLine;
return this;
}
public Map<String, Object> getPageData() {
return pageData;
}
public void setPageData(Map<String, Object> data) {
this.pageData = data;
}
/**
* 从request中获取参数并填充到PageParam中
*/
public PageParam<T> init(HttpServletRequest request) {
String sortValue = null, orderValue = null;
Map<String, Object> map = new HashMap<>();
Enumeration<String> names = request.getParameterNames();
while (names.hasMoreElements()) {
String name = names.nextElement();
String value = request.getParameter(name);
if (value == null || value.isEmpty() || value.replace(" ", "").isEmpty()) {
continue;
}
if (FILED_PAGE.equals(name)) {
setCurrent(Long.parseLong(value));
} else if (FILED_LIMIT.equals(name)) {
setSize(Long.parseLong(value));
} else if (FILED_SORT.equals(name)) {
sortValue = (needToLine ? humpToLine(value) : value);
} else if (FILED_ORDER.equals(name)) {
orderValue = value;
} else {
map.put(name, value);
}
}
setPageData(map);
// 同步排序方式到MyBatisPlus中
if (sortValue != null) {
if (VALUE_ORDER_DESC.equals(orderValue)) {
setOrder(sortValue, false);
} else/* if (VALUE_ORDER_ASC.equals(orderValue))*/ {
setOrder(sortValue, true);
}
}
return this;
}
/**
* 获取升序排序的字段
*/
public List<String> getOrderAscs() {
List<String> ascs = new ArrayList<>();
List<OrderItem> orders = getOrders();
if (orders != null) {
for (OrderItem order : orders) {
if (order.isAsc()) ascs.add(order.getColumn());
}
}
return ascs;
}
/**
* 获取降序排序的字段
*/
public List<String> getOrderDescs() {
List<String> descs = new ArrayList<>();
List<OrderItem> orders = getOrders();
if (orders != null) {
for (OrderItem order : orders) {
if (!order.isAsc()) descs.add(order.getColumn());
}
}
return descs;
}
/**
* 增加asc排序方式
*/
public PageParam<T> addOrderAsc(String... ascs) {
if (ascs != null) {
List<String> tAscs = getOrderAscs();
List<OrderItem> orderItems = new ArrayList<>();
for (String column : ascs) {
if (!tAscs.contains(column)) {
OrderItem orderItem = new OrderItem();
orderItem.setAsc(true);
orderItem.setColumn(column);
orderItems.add(orderItem);
}
}
if (getOrders() == null) {
setOrders(orderItems);
} else {
getOrders().addAll(orderItems);
}
}
return this;
}
/**
* 增加desc排序方式
*/
public PageParam<T> addOrderDesc(String... descs) {
if (descs != null) {
List<String> tDescs = getOrderDescs();
List<OrderItem> orderItems = new ArrayList<>();
for (String column : descs) {
if (!tDescs.contains(column)) {
OrderItem orderItem = new OrderItem();
orderItem.setAsc(false);
orderItem.setColumn(column);
orderItems.add(orderItem);
}
}
if (getOrders() == null) {
setOrders(orderItems);
} else {
getOrders().addAll(orderItems);
}
}
return this;
}
/**
* 移除某个排序字段
*/
public PageParam<T> removeOrder(String order, Boolean isAsc) {
List<OrderItem> orderItems = getOrders();
if (orderItems != null) {
Iterator<OrderItem> iterator = orderItems.iterator();
while (iterator.hasNext()) {
OrderItem item = iterator.next();
if (isAsc == null || isAsc == item.isAsc()) {
if (order.equals(item.getColumn())) iterator.remove();
}
}
}
return this;
}
/**
* 设置排序方式
*/
public PageParam<T> setOrder(String order, boolean isAsc) {
List<OrderItem> orderItems = new ArrayList<>();
if (order != null) {
OrderItem orderItem = new OrderItem();
orderItem.setAsc(isAsc);
orderItem.setColumn(order);
orderItems.add(orderItem);
}
setOrders(orderItems);
return this;
}
/**
* 设置默认排序方式
*/
public PageParam<T> setDefaultOrder(String[] ascs, String[] descs) {
List<OrderItem> orderItems = getOrders();
if (orderItems == null || orderItems.size() == 0) {
addOrderAsc(ascs);
addOrderDesc(descs);
}
return this;
}
/**
* 往pageData里面增加参数
*/
public PageParam<T> put(String key, Object value) {
if (pageData == null) pageData = new HashMap<>();
pageData.put(key, value);
return this;
}
/**
* 获取pageData里面参数
*/
public Object get(String key) {
return pageData.get(key);
}
public String getString(String key) {
Object o = pageData.get(key);
if (o != null) return String.valueOf(o);
return null;
}
public Integer getInt(String key) {
String str = getString(key);
if (str != null) return Integer.parseInt(str);
return null;
}
public Long getLong(String key) {
String str = getString(key);
if (str != null) return Long.parseLong(str);
return null;
}
public Float getFloat(String key) {
String str = getString(key);
if (str != null)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
毕业设计基于springboot+layui实现的课程管理系统源码+数据库 统的前端框架:layui、后端框架:springboot,shiro,mybatis-plus。
资源推荐
资源详情
资源评论
收起资源包目录
毕业设计基于springboot+layui实现的课程管理系统源码+数据库 (746个子文件)
mvnw.cmd 6KB
admin.css 96KB
layui.css 78KB
layui.css 78KB
layui.css 73KB
notice.css 59KB
skin.min.css 54KB
skin.min.css 54KB
global.css 49KB
font-awesome.css 37KB
font-awesome.min.css 30KB
main.css 27KB
skin.mobile.min.css 21KB
skin.mobile.min.css 21KB
layuimini.css 20KB
content.min.css 17KB
content.inline.min.css 17KB
content.inline.min.css 17KB
content.min.css 17KB
wangEditor.css 17KB
wangEditor.min.css 15KB
layer.css 14KB
main.min.css 14KB
layer.css 14KB
layer.css 14KB
style.css 12KB
introJs.css 12KB
dropdown.css 11KB
layui.mobile.css 10KB
css.css 9KB
zyupload-1.0.0.min.css 9KB
laydate.css 7KB
laydate.css 7KB
main.css 7KB
laydate.css 7KB
steps.css 7KB
metroStyle.css 6KB
zTreeStyle.css 6KB
Cropper.css 5KB
cascader.css 5KB
default.css 4KB
main.min.css 3KB
city-picker.css 3KB
login.css 3KB
tagsInput.css 2KB
main.css 2KB
main.css 2KB
Split.css 2KB
public.css 1KB
code.css 1KB
code.css 1KB
step.css 1KB
comment.css 1KB
main.min.css 1KB
content.min.css 1KB
code.css 1KB
content.min.css 1KB
main.min.css 1004B
content.min.css 978B
content.min.css 957B
content.mobile.min.css 544B
content.mobile.min.css 544B
treetable.css 294B
fontawesome-webfont.eot 162KB
iconfont.eot 46KB
iconfont.eot 46KB
iconfont.eot 46KB
ic_loading.gif 14KB
59.gif 10KB
59.gif 10KB
22.gif 10KB
22.gif 10KB
24.gif 8KB
24.gif 8KB
13.gif 7KB
13.gif 7KB
16.gif 7KB
16.gif 7KB
39.gif 6KB
39.gif 6KB
64.gif 6KB
64.gif 6KB
63.gif 6KB
63.gif 6KB
50.gif 6KB
50.gif 6KB
loading-0.gif 6KB
loading-0.gif 6KB
loading-0.gif 6KB
4.gif 6KB
4.gif 6KB
zTreeStandard.gif 5KB
1.gif 5KB
1.gif 5KB
42.gif 5KB
42.gif 5KB
71.gif 5KB
71.gif 5KB
21.gif 5KB
21.gif 5KB
共 746 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
资源评论
云哲-吉吉2021
- 粉丝: 3363
- 资源: 1129
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功