|
@@ -24,9 +24,9 @@ import java.util.regex.Pattern;
|
|
|
|
|
|
@Slf4j
|
|
@Slf4j
|
|
public class QueryGenerator {
|
|
public class QueryGenerator {
|
|
-
|
|
|
|
|
|
+
|
|
public static final String SQL_RULES_COLUMN = "SQL_RULES_COLUMN";
|
|
public static final String SQL_RULES_COLUMN = "SQL_RULES_COLUMN";
|
|
-
|
|
|
|
|
|
+
|
|
private static final String BEGIN = "_begin";
|
|
private static final String BEGIN = "_begin";
|
|
private static final String END = "_end";
|
|
private static final String END = "_end";
|
|
private static final String STAR = "*";
|
|
private static final String STAR = "*";
|
|
@@ -34,13 +34,13 @@ public class QueryGenerator {
|
|
private static final String NOT_EQUAL = "!";
|
|
private static final String NOT_EQUAL = "!";
|
|
/**高级查询前端传来的参数名*/
|
|
/**高级查询前端传来的参数名*/
|
|
private static final String SUPER_QUERY_PARAMS = "superQueryParams";
|
|
private static final String SUPER_QUERY_PARAMS = "superQueryParams";
|
|
-
|
|
|
|
|
|
+
|
|
/**排序列*/
|
|
/**排序列*/
|
|
private static final String ORDER_COLUMN = "column";
|
|
private static final String ORDER_COLUMN = "column";
|
|
/**排序方式*/
|
|
/**排序方式*/
|
|
private static final String ORDER_TYPE = "order";
|
|
private static final String ORDER_TYPE = "order";
|
|
private static final String ORDER_TYPE_ASC = "ASC";
|
|
private static final String ORDER_TYPE_ASC = "ASC";
|
|
-
|
|
|
|
|
|
+
|
|
/**时间格式化 */
|
|
/**时间格式化 */
|
|
private static final ThreadLocal<SimpleDateFormat> local = new ThreadLocal<SimpleDateFormat>();
|
|
private static final ThreadLocal<SimpleDateFormat> local = new ThreadLocal<SimpleDateFormat>();
|
|
private static SimpleDateFormat getTime(){
|
|
private static SimpleDateFormat getTime(){
|
|
@@ -51,7 +51,7 @@ public class QueryGenerator {
|
|
}
|
|
}
|
|
return time;
|
|
return time;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 获取查询条件构造器QueryWrapper实例 通用查询条件已被封装完成
|
|
* 获取查询条件构造器QueryWrapper实例 通用查询条件已被封装完成
|
|
* @param searchObj 查询实体
|
|
* @param searchObj 查询实体
|
|
@@ -65,35 +65,35 @@ public class QueryGenerator {
|
|
log.debug("---查询条件构造器初始化完成,耗时:"+(System.currentTimeMillis()-start)+"毫秒----");
|
|
log.debug("---查询条件构造器初始化完成,耗时:"+(System.currentTimeMillis()-start)+"毫秒----");
|
|
return queryWrapper;
|
|
return queryWrapper;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 组装Mybatis Plus 查询条件
|
|
* 组装Mybatis Plus 查询条件
|
|
- * <p>使用此方法 需要有如下几点注意:
|
|
|
|
|
|
+ * <p>使用此方法 需要有如下几点注意:
|
|
* <br>1.使用QueryWrapper 而非LambdaQueryWrapper;
|
|
* <br>1.使用QueryWrapper 而非LambdaQueryWrapper;
|
|
- * <br>2.实例化QueryWrapper时不可将实体传入参数
|
|
|
|
|
|
+ * <br>2.实例化QueryWrapper时不可将实体传入参数
|
|
* <br>错误示例:如QueryWrapper<JeecgDemo> queryWrapper = new QueryWrapper<JeecgDemo>(jeecgDemo);
|
|
* <br>错误示例:如QueryWrapper<JeecgDemo> queryWrapper = new QueryWrapper<JeecgDemo>(jeecgDemo);
|
|
* <br>正确示例:QueryWrapper<JeecgDemo> queryWrapper = new QueryWrapper<JeecgDemo>();
|
|
* <br>正确示例:QueryWrapper<JeecgDemo> queryWrapper = new QueryWrapper<JeecgDemo>();
|
|
* <br>3.也可以不使用这个方法直接调用 {@link #initQueryWrapper}直接获取实例
|
|
* <br>3.也可以不使用这个方法直接调用 {@link #initQueryWrapper}直接获取实例
|
|
*/
|
|
*/
|
|
public static void installMplus(QueryWrapper<?> queryWrapper,Object searchObj,Map<String, String[]> parameterMap) {
|
|
public static void installMplus(QueryWrapper<?> queryWrapper,Object searchObj,Map<String, String[]> parameterMap) {
|
|
-
|
|
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* 注意:权限查询由前端配置数据规则 当一个人有多个所属部门时候 可以在规则配置包含条件 orgCode 包含 #{sys_org_code}
|
|
* 注意:权限查询由前端配置数据规则 当一个人有多个所属部门时候 可以在规则配置包含条件 orgCode 包含 #{sys_org_code}
|
|
- 但是不支持在自定义SQL中写orgCode in #{sys_org_code}
|
|
|
|
|
|
+ 但是不支持在自定义SQL中写orgCode in #{sys_org_code}
|
|
当一个人只有一个部门 就直接配置等于条件: orgCode 等于 #{sys_org_code} 或者配置自定义SQL: orgCode = '#{sys_org_code}'
|
|
当一个人只有一个部门 就直接配置等于条件: orgCode 等于 #{sys_org_code} 或者配置自定义SQL: orgCode = '#{sys_org_code}'
|
|
*/
|
|
*/
|
|
-
|
|
|
|
|
|
+
|
|
//区间条件组装 模糊查询 高级查询组装 简单排序 权限查询
|
|
//区间条件组装 模糊查询 高级查询组装 简单排序 权限查询
|
|
PropertyDescriptor[] origDescriptors = PropertyUtils.getPropertyDescriptors(searchObj);
|
|
PropertyDescriptor[] origDescriptors = PropertyUtils.getPropertyDescriptors(searchObj);
|
|
Map<String,SysPermissionDataRule> ruleMap = getRuleMap();
|
|
Map<String,SysPermissionDataRule> ruleMap = getRuleMap();
|
|
-
|
|
|
|
|
|
+
|
|
//权限规则自定义SQL表达式
|
|
//权限规则自定义SQL表达式
|
|
for (String c : ruleMap.keySet()) {
|
|
for (String c : ruleMap.keySet()) {
|
|
if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){
|
|
if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){
|
|
queryWrapper.and(i ->i.apply(getSqlRuleValue(ruleMap.get(c).getRuleValue())));
|
|
queryWrapper.and(i ->i.apply(getSqlRuleValue(ruleMap.get(c).getRuleValue())));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
String name, type;
|
|
String name, type;
|
|
for (int i = 0; i < origDescriptors.length; i++) {
|
|
for (int i = 0; i < origDescriptors.length; i++) {
|
|
//aliasName = origDescriptors[i].getName(); mybatis 不存在实体属性 不用处理别名的情况
|
|
//aliasName = origDescriptors[i].getName(); mybatis 不存在实体属性 不用处理别名的情况
|
|
@@ -103,25 +103,25 @@ public class QueryGenerator {
|
|
if (judgedIsUselessField(name)|| !PropertyUtils.isReadable(searchObj, name)) {
|
|
if (judgedIsUselessField(name)|| !PropertyUtils.isReadable(searchObj, name)) {
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
//数据权限查询
|
|
//数据权限查询
|
|
if(ruleMap.containsKey(name)) {
|
|
if(ruleMap.containsKey(name)) {
|
|
addRuleToQueryWrapper(ruleMap.get(name), name, origDescriptors[i].getPropertyType(), queryWrapper);
|
|
addRuleToQueryWrapper(ruleMap.get(name), name, origDescriptors[i].getPropertyType(), queryWrapper);
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
// 添加 判断是否有区间值
|
|
// 添加 判断是否有区间值
|
|
String endValue = null,beginValue = null;
|
|
String endValue = null,beginValue = null;
|
|
if (parameterMap != null && parameterMap.containsKey(name + BEGIN)) {
|
|
if (parameterMap != null && parameterMap.containsKey(name + BEGIN)) {
|
|
beginValue = parameterMap.get(name + BEGIN)[0].trim();
|
|
beginValue = parameterMap.get(name + BEGIN)[0].trim();
|
|
addQueryByRule(queryWrapper, name, type, beginValue, QueryRuleEnum.GE);
|
|
addQueryByRule(queryWrapper, name, type, beginValue, QueryRuleEnum.GE);
|
|
-
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
+ }
|
|
if (parameterMap != null && parameterMap.containsKey(name + END)) {
|
|
if (parameterMap != null && parameterMap.containsKey(name + END)) {
|
|
endValue = parameterMap.get(name + END)[0].trim();
|
|
endValue = parameterMap.get(name + END)[0].trim();
|
|
addQueryByRule(queryWrapper, name, type, endValue, QueryRuleEnum.LE);
|
|
addQueryByRule(queryWrapper, name, type, endValue, QueryRuleEnum.LE);
|
|
}
|
|
}
|
|
-
|
|
|
|
- //判断单值 参数带不同标识字符串 走不同的查询
|
|
|
|
|
|
+
|
|
|
|
+ //判断单值 参数带不同标识字符串 走不同的查询
|
|
//TODO 这种前后带逗号的支持分割后模糊查询需要否 使多选字段的查询生效
|
|
//TODO 这种前后带逗号的支持分割后模糊查询需要否 使多选字段的查询生效
|
|
Object value = PropertyUtils.getSimpleProperty(searchObj, name);
|
|
Object value = PropertyUtils.getSimpleProperty(searchObj, name);
|
|
if (null != value && value.toString().startsWith(COMMA) && value.toString().endsWith(COMMA)) {
|
|
if (null != value && value.toString().startsWith(COMMA) && value.toString().endsWith(COMMA)) {
|
|
@@ -145,18 +145,18 @@ public class QueryGenerator {
|
|
value = replaceValue(rule,value);
|
|
value = replaceValue(rule,value);
|
|
addEasyQuery(queryWrapper, name, rule, value);
|
|
addEasyQuery(queryWrapper, name, rule, value);
|
|
}
|
|
}
|
|
-
|
|
|
|
- } catch (Exception e) {
|
|
|
|
|
|
+
|
|
|
|
+ } catch (Exception e) {
|
|
log.error(e.getMessage(), e);
|
|
log.error(e.getMessage(), e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- // 排序逻辑 处理
|
|
|
|
|
|
+ // 排序逻辑 处理
|
|
doMultiFieldsOrder(queryWrapper, parameterMap);
|
|
doMultiFieldsOrder(queryWrapper, parameterMap);
|
|
-
|
|
|
|
- //高级查询
|
|
|
|
|
|
+
|
|
|
|
+ //高级查询
|
|
doSuperQuery(queryWrapper, parameterMap);
|
|
doSuperQuery(queryWrapper, parameterMap);
|
|
-
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
/**
|
|
* 多字段排序
|
|
* 多字段排序
|
|
@@ -177,7 +177,7 @@ public class QueryGenerator {
|
|
column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX));
|
|
column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX));
|
|
}
|
|
}
|
|
//SQL注入check
|
|
//SQL注入check
|
|
- SqlInjectionUtil.filterContent(column);
|
|
|
|
|
|
+ SqlInjectionUtil.filterContent(column);
|
|
|
|
|
|
if (order.toUpperCase().indexOf(ORDER_TYPE_ASC)>=0) {
|
|
if (order.toUpperCase().indexOf(ORDER_TYPE_ASC)>=0) {
|
|
queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column));
|
|
queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column));
|
|
@@ -186,8 +186,8 @@ public class QueryGenerator {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
- /**
|
|
|
|
|
|
+
|
|
|
|
+ /**
|
|
* 高级查询
|
|
* 高级查询
|
|
* @param queryWrapper
|
|
* @param queryWrapper
|
|
* @param parameterMap
|
|
* @param parameterMap
|
|
@@ -203,8 +203,8 @@ public class QueryGenerator {
|
|
}
|
|
}
|
|
List<QueryCondition> conditions = JSON.parseArray(superQueryParams, QueryCondition.class);
|
|
List<QueryCondition> conditions = JSON.parseArray(superQueryParams, QueryCondition.class);
|
|
log.info("---高级查询参数-->"+conditions.toString());
|
|
log.info("---高级查询参数-->"+conditions.toString());
|
|
-
|
|
|
|
- for (QueryCondition rule : conditions) {
|
|
|
|
|
|
+
|
|
|
|
+ for (QueryCondition rule : conditions) {
|
|
if(oConvertUtils.isNotEmpty(rule.getField()) && oConvertUtils.isNotEmpty(rule.getRule()) && oConvertUtils.isNotEmpty(rule.getVal())){
|
|
if(oConvertUtils.isNotEmpty(rule.getField()) && oConvertUtils.isNotEmpty(rule.getRule()) && oConvertUtils.isNotEmpty(rule.getVal())){
|
|
addEasyQuery(queryWrapper, rule.getField(), QueryRuleEnum.getByValue(rule.getRule()), rule.getVal());
|
|
addEasyQuery(queryWrapper, rule.getField(), QueryRuleEnum.getByValue(rule.getRule()), rule.getVal());
|
|
}
|
|
}
|
|
@@ -235,8 +235,8 @@ public class QueryGenerator {
|
|
if (rule == null && val.length() >= 1) {
|
|
if (rule == null && val.length() >= 1) {
|
|
rule = QueryRuleEnum.getByValue(val.substring(0, 1));
|
|
rule = QueryRuleEnum.getByValue(val.substring(0, 1));
|
|
}
|
|
}
|
|
-
|
|
|
|
- // step 3 like
|
|
|
|
|
|
+
|
|
|
|
+ // step 3 like
|
|
if (rule == null && val.contains(STAR)) {
|
|
if (rule == null && val.contains(STAR)) {
|
|
if (val.startsWith(STAR) && val.endsWith(STAR)) {
|
|
if (val.startsWith(STAR) && val.endsWith(STAR)) {
|
|
rule = QueryRuleEnum.LIKE;
|
|
rule = QueryRuleEnum.LIKE;
|
|
@@ -251,16 +251,16 @@ public class QueryGenerator {
|
|
//TODO in 查询这里应该有个bug 如果一字段本身就是多选 此时用in查询 未必能查询出来
|
|
//TODO in 查询这里应该有个bug 如果一字段本身就是多选 此时用in查询 未必能查询出来
|
|
rule = QueryRuleEnum.IN;
|
|
rule = QueryRuleEnum.IN;
|
|
}
|
|
}
|
|
- // step 5 !=
|
|
|
|
|
|
+ // step 5 !=
|
|
if(rule == null && val.startsWith(NOT_EQUAL)){
|
|
if(rule == null && val.startsWith(NOT_EQUAL)){
|
|
rule = QueryRuleEnum.NE;
|
|
rule = QueryRuleEnum.NE;
|
|
}
|
|
}
|
|
return rule != null ? rule : QueryRuleEnum.EQ;
|
|
return rule != null ? rule : QueryRuleEnum.EQ;
|
|
}
|
|
}
|
|
-
|
|
|
|
- /**
|
|
|
|
|
|
+
|
|
|
|
+ /**
|
|
* 替换掉关键字字符
|
|
* 替换掉关键字字符
|
|
- *
|
|
|
|
|
|
+ *
|
|
* @param rule
|
|
* @param rule
|
|
* @param value
|
|
* @param value
|
|
* @return
|
|
* @return
|
|
@@ -280,14 +280,14 @@ public class QueryGenerator {
|
|
} else if (rule == QueryRuleEnum.RIGHT_LIKE) {
|
|
} else if (rule == QueryRuleEnum.RIGHT_LIKE) {
|
|
value = val.substring(0, val.length() - 1);
|
|
value = val.substring(0, val.length() - 1);
|
|
} else if (rule == QueryRuleEnum.IN) {
|
|
} else if (rule == QueryRuleEnum.IN) {
|
|
- value = val.split(",");
|
|
|
|
|
|
+ value = val.split(COMMA);
|
|
} else {
|
|
} else {
|
|
value = val.replace(rule.getValue(),"");
|
|
value = val.replace(rule.getValue(),"");
|
|
}
|
|
}
|
|
return value;
|
|
return value;
|
|
}
|
|
}
|
|
-
|
|
|
|
- private static void addQueryByRule(QueryWrapper<?> queryWrapper,String name,String type,String value,QueryRuleEnum rule) throws ParseException {
|
|
|
|
|
|
+
|
|
|
|
+ private static void addQueryByRule(QueryWrapper<?> queryWrapper,String name,String type,String value,QueryRuleEnum rule) throws ParseException {
|
|
if(!"".equals(value)) {
|
|
if(!"".equals(value)) {
|
|
Object temp;
|
|
Object temp;
|
|
switch (type) {
|
|
switch (type) {
|
|
@@ -319,8 +319,8 @@ public class QueryGenerator {
|
|
addEasyQuery(queryWrapper, name, rule, temp);
|
|
addEasyQuery(queryWrapper, name, rule, temp);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
- /**
|
|
|
|
|
|
+
|
|
|
|
+ /**
|
|
* 获取日期类型的值
|
|
* 获取日期类型的值
|
|
* @param value
|
|
* @param value
|
|
* @param rule
|
|
* @param rule
|
|
@@ -344,8 +344,8 @@ public class QueryGenerator {
|
|
}
|
|
}
|
|
return date;
|
|
return date;
|
|
}
|
|
}
|
|
-
|
|
|
|
- /**
|
|
|
|
|
|
+
|
|
|
|
+ /**
|
|
* 根据规则走不同的查询
|
|
* 根据规则走不同的查询
|
|
* @param queryWrapper QueryWrapper
|
|
* @param queryWrapper QueryWrapper
|
|
* @param name 字段名字
|
|
* @param name 字段名字
|
|
@@ -379,7 +379,7 @@ public class QueryGenerator {
|
|
break;
|
|
break;
|
|
case IN:
|
|
case IN:
|
|
if(value instanceof String) {
|
|
if(value instanceof String) {
|
|
- queryWrapper.in(name, (Object[])value.toString().split(","));
|
|
|
|
|
|
+ queryWrapper.in(name, (Object[]) value.toString().split(COMMA));
|
|
}else if(value instanceof String[]) {
|
|
}else if(value instanceof String[]) {
|
|
queryWrapper.in(name, (Object[]) value);
|
|
queryWrapper.in(name, (Object[]) value);
|
|
}else {
|
|
}else {
|
|
@@ -401,7 +401,7 @@ public class QueryGenerator {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
/**
|
|
- *
|
|
|
|
|
|
+ *
|
|
* @param name
|
|
* @param name
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@@ -411,10 +411,9 @@ public class QueryGenerator {
|
|
|| "sort".equals(name) || "order".equals(name);
|
|
|| "sort".equals(name) || "order".equals(name);
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
|
|
|
|
- /**
|
|
|
|
- *
|
|
|
|
|
|
+ /**
|
|
|
|
+ *
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
public static Map<String, SysPermissionDataRule> getRuleMap() {
|
|
public static Map<String, SysPermissionDataRule> getRuleMap() {
|
|
@@ -434,11 +433,11 @@ public class QueryGenerator {
|
|
}
|
|
}
|
|
return ruleMap;
|
|
return ruleMap;
|
|
}
|
|
}
|
|
-
|
|
|
|
- private static void addRuleToQueryWrapper(SysPermissionDataRule dataRule,String name, Class propertyType, QueryWrapper<?> queryWrapper) {
|
|
|
|
|
|
+
|
|
|
|
+ private static void addRuleToQueryWrapper(SysPermissionDataRule dataRule,String name, Class propertyType, QueryWrapper<?> queryWrapper) {
|
|
QueryRuleEnum rule = QueryRuleEnum.getByValue(dataRule.getRuleConditions());
|
|
QueryRuleEnum rule = QueryRuleEnum.getByValue(dataRule.getRuleConditions());
|
|
if(rule.equals(QueryRuleEnum.IN) && ! propertyType.equals(String.class)) {
|
|
if(rule.equals(QueryRuleEnum.IN) && ! propertyType.equals(String.class)) {
|
|
- String[] values = dataRule.getRuleValue().split(",");
|
|
|
|
|
|
+ String[] values = dataRule.getRuleValue().split(COMMA);
|
|
Object[] objs = new Object[values.length];
|
|
Object[] objs = new Object[values.length];
|
|
for (int i = 0; i < values.length; i++) {
|
|
for (int i = 0; i < values.length; i++) {
|
|
objs[i] = NumberUtils.parseNumber(values[i], propertyType);
|
|
objs[i] = NumberUtils.parseNumber(values[i], propertyType);
|
|
@@ -452,16 +451,16 @@ public class QueryGenerator {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
- public static String converRuleValue(String ruleValue) {
|
|
|
|
|
|
+
|
|
|
|
+ public static String converRuleValue(String ruleValue) {
|
|
String value = JwtUtil.getSessionData(ruleValue);
|
|
String value = JwtUtil.getSessionData(ruleValue);
|
|
if(oConvertUtils.isEmpty(value)) {
|
|
if(oConvertUtils.isEmpty(value)) {
|
|
value = JwtUtil.getUserSystemData(ruleValue,null);
|
|
value = JwtUtil.getUserSystemData(ruleValue,null);
|
|
}
|
|
}
|
|
return value!= null ? value : ruleValue;
|
|
return value!= null ? value : ruleValue;
|
|
}
|
|
}
|
|
-
|
|
|
|
- public static String getSqlRuleValue(String sqlRule){
|
|
|
|
|
|
+
|
|
|
|
+ public static String getSqlRuleValue(String sqlRule){
|
|
try {
|
|
try {
|
|
Set<String> varParams = getSqlRuleParams(sqlRule);
|
|
Set<String> varParams = getSqlRuleParams(sqlRule);
|
|
for(String var:varParams){
|
|
for(String var:varParams){
|
|
@@ -473,8 +472,8 @@ public class QueryGenerator {
|
|
}
|
|
}
|
|
return sqlRule;
|
|
return sqlRule;
|
|
}
|
|
}
|
|
-
|
|
|
|
- /**
|
|
|
|
|
|
+
|
|
|
|
+ /**
|
|
* 获取sql中的#{key} 这个key组成的set
|
|
* 获取sql中的#{key} 这个key组成的set
|
|
*/
|
|
*/
|
|
public static Set<String> getSqlRuleParams(String sql) {
|
|
public static Set<String> getSqlRuleParams(String sql) {
|
|
@@ -483,8 +482,8 @@ public class QueryGenerator {
|
|
}
|
|
}
|
|
Set<String> varParams = new HashSet<String>();
|
|
Set<String> varParams = new HashSet<String>();
|
|
String regex = "\\#\\{\\w+\\}";
|
|
String regex = "\\#\\{\\w+\\}";
|
|
-
|
|
|
|
- Pattern p = Pattern.compile(regex);
|
|
|
|
|
|
+
|
|
|
|
+ Pattern p = Pattern.compile(regex);
|
|
Matcher m = p.matcher(sql);
|
|
Matcher m = p.matcher(sql);
|
|
while(m.find()){
|
|
while(m.find()){
|
|
String var = m.group();
|
|
String var = m.group();
|
|
@@ -492,9 +491,9 @@ public class QueryGenerator {
|
|
}
|
|
}
|
|
return varParams;
|
|
return varParams;
|
|
}
|
|
}
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 获取查询条件
|
|
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 获取查询条件
|
|
* @param field
|
|
* @param field
|
|
* @param alias
|
|
* @param alias
|
|
* @param value
|
|
* @param value
|
|
@@ -564,10 +563,10 @@ public class QueryGenerator {
|
|
return value.toString();
|
|
return value.toString();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
- private static String getInConditionValue(Object value,boolean isString) {
|
|
|
|
|
|
+
|
|
|
|
+ private static String getInConditionValue(Object value,boolean isString) {
|
|
if(isString) {
|
|
if(isString) {
|
|
- String[] temp = value.toString().split(",");
|
|
|
|
|
|
+ String[] temp = value.toString().split(COMMA);
|
|
String res="";
|
|
String res="";
|
|
for (String string : temp) {
|
|
for (String string : temp) {
|
|
res+=",'"+string+"'";
|
|
res+=",'"+string+"'";
|
|
@@ -577,8 +576,8 @@ public class QueryGenerator {
|
|
return "("+value.toString()+")";
|
|
return "("+value.toString()+")";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
- private static String getLikeConditionValue(Object value) {
|
|
|
|
|
|
+
|
|
|
|
+ private static String getLikeConditionValue(Object value) {
|
|
String str = value.toString().trim();
|
|
String str = value.toString().trim();
|
|
if(str.startsWith("*") && str.endsWith("*")) {
|
|
if(str.startsWith("*") && str.endsWith("*")) {
|
|
return "'%"+str.substring(1,str.length()-1)+"%'";
|
|
return "'%"+str.substring(1,str.length()-1)+"%'";
|
|
@@ -590,6 +589,6 @@ public class QueryGenerator {
|
|
return str;
|
|
return str;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+
|
|
}
|
|
}
|