组装Mybatis Plus 查询条件添加排除条件
This commit is contained in:
parent
3d6b57632f
commit
683a36eeda
@ -26,17 +26,26 @@ public class QueryGenerator {
|
||||
private static final String STAR = "*";
|
||||
private static final String COMMA = ",";
|
||||
private static final String NOT_EQUAL = "!";
|
||||
/**高级查询前端传来的参数名*/
|
||||
/**
|
||||
* 高级查询前端传来的参数名
|
||||
*/
|
||||
private static final String SUPER_QUERY_PARAMS = "superQueryParams";
|
||||
|
||||
/**排序列*/
|
||||
/**
|
||||
* 排序列
|
||||
*/
|
||||
private static final String ORDER_COLUMN = "column";
|
||||
/**排序方式*/
|
||||
/**
|
||||
* 排序方式
|
||||
*/
|
||||
private static final String ORDER_TYPE = "order";
|
||||
private static final String ORDER_TYPE_ASC = "ASC";
|
||||
|
||||
/**时间格式化 */
|
||||
/**
|
||||
* 时间格式化
|
||||
*/
|
||||
private static final ThreadLocal<SimpleDateFormat> local = new ThreadLocal<SimpleDateFormat>();
|
||||
|
||||
private static SimpleDateFormat getTime() {
|
||||
SimpleDateFormat time = local.get();
|
||||
if (time == null) {
|
||||
@ -48,6 +57,7 @@ public class QueryGenerator {
|
||||
|
||||
/**
|
||||
* 获取查询条件构造器QueryWrapper实例 通用查询条件已被封装完成
|
||||
*
|
||||
* @param searchObj 查询实体
|
||||
* @param parameterMap request.getParameterMap()
|
||||
* @return QueryWrapper实例
|
||||
@ -60,6 +70,84 @@ public class QueryGenerator {
|
||||
return queryWrapper;
|
||||
}
|
||||
|
||||
/**
|
||||
* 组装Mybatis Plus 查询条件
|
||||
*
|
||||
* @param queryWrapper
|
||||
* @param searchObj
|
||||
* @param parameterMap
|
||||
* @param excludeFields 排除属性
|
||||
*/
|
||||
public static void installMplus(QueryWrapper<?> queryWrapper, Object searchObj, Map<String, String[]> parameterMap, List<String> excludeFields) {
|
||||
|
||||
/*
|
||||
* 注意:权限查询由前端配置数据规则 当一个人有多个所属部门时候 可以在规则配置包含条件 orgCode 包含 #{sys_org_code}
|
||||
但是不支持在自定义SQL中写orgCode in #{sys_org_code}
|
||||
当一个人只有一个部门 就直接配置等于条件: orgCode 等于 #{sys_org_code} 或者配置自定义SQL: orgCode = '#{sys_org_code}'
|
||||
*/
|
||||
|
||||
//区间条件组装 模糊查询 高级查询组装 简单排序 权限查询
|
||||
PropertyDescriptor origDescriptors[] = PropertyUtils.getPropertyDescriptors(searchObj);
|
||||
|
||||
|
||||
String name, type;
|
||||
for (int i = 0; i < origDescriptors.length; i++) {
|
||||
//aliasName = origDescriptors[i].getName(); mybatis 不存在实体属性 不用处理别名的情况
|
||||
name = origDescriptors[i].getName();
|
||||
type = origDescriptors[i].getPropertyType().toString();
|
||||
try {
|
||||
if (judgedIsUselessField(name) || !PropertyUtils.isReadable(searchObj, name) || (excludeFields != null && excludeFields.contains(name))) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 添加 判断是否有区间值
|
||||
String endValue = null, beginValue = null;
|
||||
if (parameterMap != null && parameterMap.containsKey(name + BEGIN)) {
|
||||
beginValue = parameterMap.get(name + BEGIN)[0].trim();
|
||||
addQueryByRule(queryWrapper, name, type, beginValue, QueryRuleEnum.GE);
|
||||
|
||||
}
|
||||
if (parameterMap != null && parameterMap.containsKey(name + END)) {
|
||||
endValue = parameterMap.get(name + END)[0].trim();
|
||||
addQueryByRule(queryWrapper, name, type, endValue, QueryRuleEnum.LE);
|
||||
}
|
||||
|
||||
//判断单值 参数带不同标识字符串 走不同的查询
|
||||
//TODO 这种前后带逗号的支持分割后模糊查询需要否 使多选字段的查询生效
|
||||
Object value = PropertyUtils.getSimpleProperty(searchObj, name);
|
||||
if (null != value && value.toString().startsWith(COMMA) && value.toString().endsWith(COMMA)) {
|
||||
String multiLikeval = value.toString().replace(",,", COMMA);
|
||||
String[] vals = multiLikeval.substring(1, multiLikeval.length()).split(COMMA);
|
||||
final String field = oConvertUtils.camelToUnderline(name);
|
||||
if (vals.length > 1) {
|
||||
queryWrapper.and(j -> {
|
||||
j = j.like(field, vals[0]);
|
||||
for (int k = 1; k < vals.length; k++) {
|
||||
j = j.or().like(field, vals[k]);
|
||||
}
|
||||
//return j;
|
||||
});
|
||||
} else {
|
||||
queryWrapper.and(j -> j.like(field, vals[0]));
|
||||
}
|
||||
} else {
|
||||
//根据参数值带什么关键字符串判断走什么类型的查询
|
||||
QueryRuleEnum rule = convert2Rule(value);
|
||||
value = replaceValue(rule, value);
|
||||
addEasyQuery(queryWrapper, name, rule, value);
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
// 排序逻辑 处理
|
||||
doMultiFieldsOrder(queryWrapper, parameterMap);
|
||||
|
||||
//高级查询
|
||||
doSuperQuery(queryWrapper, parameterMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* 组装Mybatis Plus 查询条件
|
||||
* <p>使用此方法 需要有如下几点注意:
|
||||
@ -161,6 +249,7 @@ public class QueryGenerator {
|
||||
|
||||
/**
|
||||
* 高级查询
|
||||
*
|
||||
* @param queryWrapper
|
||||
* @param parameterMap
|
||||
*/
|
||||
@ -184,9 +273,11 @@ public class QueryGenerator {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据所传的值 转化成对应的比较方式
|
||||
* 支持><= like in !
|
||||
*
|
||||
* @param value
|
||||
* @return
|
||||
*/
|
||||
@ -291,6 +382,7 @@ public class QueryGenerator {
|
||||
|
||||
/**
|
||||
* 获取日期类型的值
|
||||
*
|
||||
* @param value
|
||||
* @param rule
|
||||
* @return
|
||||
@ -316,6 +408,7 @@ public class QueryGenerator {
|
||||
|
||||
/**
|
||||
* 根据规则走不同的查询
|
||||
*
|
||||
* @param queryWrapper QueryWrapper
|
||||
* @param name 字段名字
|
||||
* @param rule 查询规则
|
||||
@ -369,8 +462,8 @@ public class QueryGenerator {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param name
|
||||
* @return
|
||||
*/
|
||||
@ -381,10 +474,4 @@ public class QueryGenerator {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user