From b21fc542a0ae534eeec6b08a0f97281440eba1ab Mon Sep 17 00:00:00 2001
From: jinpengyong <jpy123456>
Date: Mon, 21 Sep 2020 16:07:14 +0800
Subject: [PATCH] update
---
src/main/java/com/moral/common/util/ExampleUtil.java | 136 ++++++++++++++++++++++++---------------------
1 files changed, 72 insertions(+), 64 deletions(-)
diff --git a/src/main/java/com/moral/common/util/ExampleUtil.java b/src/main/java/com/moral/common/util/ExampleUtil.java
index c74510b..e315408 100644
--- a/src/main/java/com/moral/common/util/ExampleUtil.java
+++ b/src/main/java/com/moral/common/util/ExampleUtil.java
@@ -5,6 +5,7 @@
import lombok.extern.log4j.Log4j;
import tk.mybatis.mapper.entity.Example;
+import javax.validation.constraints.NotNull;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
@@ -18,9 +19,13 @@
@Log4j
public class ExampleUtil {
- private final static String OR_SPLIT = "or\\|";
- private final static String CRITERIA_SPLIT = "\\|\\|\\|";
- private final static String CONDITION_SPLIT = "\\|\\|";
+ private final static String SPLIT = "\\|";
+ private final static String OR = "_OR";
+ private final static String OR_SPLIT = OR+SPLIT;
+ private final static String CRITERIA = "_CR";
+ private final static String CRITERIA_SPLIT = CRITERIA+SPLIT;
+ private final static String CONDITION = "_CO";
+ private final static String CONDITION_SPLIT = CONDITION+SPLIT;
private static Map<String, Method> criteriaMethodMap = new ConcurrentHashMap<>();
private static void setOrderByClause(Example example,String orderByClause) throws UnsupportedEncodingException, NoSuchFieldException {
orderByClause = URLDecoder.decode(orderByClause,"UTF-8");
@@ -55,40 +60,7 @@
}
if(!StringUtils.isNullOrEmpty(params)){
params = URLDecoder.decode(params, "UTF-8");
- if (!StringUtils.isNullOrEmpty(params) && params.startsWith("or|")) {
- String[] criteria = params.trim().split(OR_SPLIT);
- for (String criterion : criteria) {
- // criterion���null���""������
- if(StringUtils.isNullOrEmpty(criterion)) { continue;};
- Example.Criteria criteriaOfExample = example.or();
- if (!StringUtils.isNullOrEmpty(criterion)) {
- String[] conditions = criterion.trim().split(CRITERIA_SPLIT);
- for (String condition : conditions) {
- if (!StringUtils.isNullOrEmpty(condition)) {
- String[] conditionItems = condition.split(CONDITION_SPLIT);
- if (conditionItems != null && conditionItems.length > 1) {
- //���������
- String methodName = conditionItems[0];
- //���������
- String propertyName = conditionItems[1];
- //������������
- List values = new ArrayList<Object>();
- if (conditionItems.length > 2) {
- for (int index = 2; index < conditionItems.length; index++) {
- values.add(conditionItems[index]);
- }
- }
- Method method = getExampleMethod(methodName,values.size()+1);
- if (method != null && (methodName.equals("andCondition")||isPropertyOfClass(clazz, propertyName))) {
- invokeMethod(criteriaOfExample,method,propertyName,values);
- }
-
- }
- }
- }
- }
- }
- }
+ loadCriterias(example,params);
}
if(!isDelete) {
addDeletesToExample(example,clazz);
@@ -99,34 +71,67 @@
}
return example;
}
-
- private static void invokeMethod(Object obj, Method method,String propertyName,List values) throws InvocationTargetException, IllegalAccessException {
- int len = values.size();
- switch (len) {
- case 0:
- if(method.getParameterCount()==1) {
- method.invoke(obj, propertyName);
- }
- break;
- case 1:
-
- if(method.getParameterCount()==2){
- method.invoke(obj,propertyName,values.get(0));
- }
- break;
- //between ������
- case 2:
- if(method.getParameterCount()==3){
- method.invoke(obj,propertyName,values.toArray());
- }
- break;
- //in ������
- default:
- if(method.getParameterCount()==2){
- method.invoke(obj,propertyName,values);
- }
- break;
+ private static void loadCriterias(Example example,String params) throws InvocationTargetException, IllegalAccessException {
+ if (params.startsWith(OR)) {
+ String[] criteria = params.trim().split(OR_SPLIT);
+ for (String criterion : criteria) {
+ // criterion���null���""������
+ if(StringUtils.isNullOrEmpty(criterion)) { continue;};
+ Example.Criteria criteriaOfExample = example.or();
+ loadConditions(example,criteriaOfExample,criterion);
+ }
}
+ }
+ private static void loadConditions(Example example,Example.Criteria criteriaOfExample,String criterion) throws InvocationTargetException, IllegalAccessException {
+ String[] conditions = criterion.trim().split(CRITERIA_SPLIT);
+ for (String condition : conditions) {
+ if (!StringUtils.isNullOrEmpty(condition)) {
+ String[] conditionItems = condition.split(CONDITION_SPLIT);
+ if (conditionItems != null && conditionItems.length > 1) {
+ //���������
+ String methodName = conditionItems[0];
+ //���������
+ String propertyName = conditionItems[1];
+ //������������
+ List values = new ArrayList<Object>();
+ if (conditionItems.length > 2) {
+ for (int index = 2; index < conditionItems.length; index++) {
+ values.add(conditionItems[index]);
+ }
+ }
+ Method method = getExampleMethod(methodName,values.size()+1);
+ if (method != null && (methodName.equals("andCondition")||isPropertyOfClass(example.getEntityClass(), propertyName))) {
+ invokeMethod(criteriaOfExample,method,propertyName,values);
+ } else {
+ log.warn(condition+" can't be executed as condition");
+ }
+ }
+ }
+ }
+ }
+ private static boolean validatetParameters(@NotNull Method method,int len) {
+ //������������propertyName���������string������
+ return method.getParameterCount() == (len+1) && method.getParameterTypes()[0].equals(String.class);
+ }
+ private static void invokeMethod(@NotNull Object obj,@NotNull Method method,@NotNull String propertyName,@NotNull List values) throws InvocationTargetException, IllegalAccessException {
+ int len = values.size();
+ switch (len) {
+ case 0:
+ method.invoke(obj, propertyName);
+ break;
+ case 1:
+ Object value = values.get(0) == "null" ? null : values.get(0);
+ method.invoke(obj, propertyName,value);
+ break;
+ //between ������
+ case 2:
+ method.invoke(obj, propertyName, values.toArray());
+ break;
+ //in ������
+ default:
+ method.invoke(obj, propertyName, values);
+ break;
+ }
}
;
@@ -176,6 +181,9 @@
}
}
}
+ if(methodTemp==null || validatetParameters(methodTemp,paramCount)){
+ return null;
+ }
return methodTemp;
}
}
--
Gitblit v1.8.0