Browse Source

优化逻辑

周浩 9 years ago
parent
commit
f775407876

+ 14 - 9
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/GenericPo.java

@@ -27,15 +27,20 @@ public class GenericPo<PK> implements Serializable {
         this.id = id;
     }
 
-    private Map<String, Object> customAttr = new LinkedHashMap<>();
+    /**
+     * 自定义属性
+     */
+    private Map<String, Object> properties;
 
-    public <T> T attr(String attr, T value) {
-        customAttr.put(attr, value);
+    public <T> T setProperty(String attr, T value) {
+        if (properties == null) properties = new LinkedHashMap<>();
+        properties.put(attr, value);
         return value;
     }
 
-    public <T> T attr(String attr) {
-        return ((T) customAttr.get(attr));
+    public <T> T getProperty(String attr) {
+        if (properties == null) return null;
+        return ((T) properties.get(attr));
     }
 
     @Override
@@ -60,11 +65,11 @@ public class GenericPo<PK> implements Serializable {
         return MD5.encode(UUID.randomUUID().toString());
     }
 
-    public Map<String, Object> getCustomAttr() {
-        return customAttr;
+    public Map<String, Object> getProperties() {
+        return properties;
     }
 
-    public void setCustomAttr(Map<String, Object> customAttr) {
-        this.customAttr = customAttr;
+    public void setProperties(Map<String, Object> properties) {
+        this.properties = properties;
     }
 }

+ 2 - 2
hsweb-web-core/src/main/java/org/hsweb/web/core/message/FastJsonHttpMessageConverter.java

@@ -33,8 +33,7 @@ public class FastJsonHttpMessageConverter extends AbstractHttpMessageConverter<O
 
     public FastJsonHttpMessageConverter() {
         super(new MediaType("application", "json", UTF8),
-                new MediaType("application", "*+json", UTF8),
-                MediaType.APPLICATION_JSON);
+                new MediaType("application", "*+json", UTF8));
     }
 
     @Override
@@ -127,4 +126,5 @@ public class FastJsonHttpMessageConverter extends AbstractHttpMessageConverter<O
             }
         return filters.toArray(new PropertyPreFilter[filters.size()]);
     }
+
 }

+ 60 - 2
hsweb-web-core/src/main/java/org/hsweb/web/core/message/ResponseMessage.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import org.webbuilder.utils.common.DateTimeUtils;
 
 import java.io.Serializable;
+import java.lang.reflect.Field;
 import java.util.*;
 
 /**
@@ -83,7 +84,20 @@ public class ResponseMessage implements Serializable {
         if (includes == null)
             includes = new HashMap<>();
         if (fields == null || fields.isEmpty()) return this;
-        getStringListFormMap(includes, type).addAll(fields);
+        fields.forEach(field -> {
+            if (field.contains(".")) {
+                String tmp[] = field.split("[.]", 2);
+                try {
+                    Field field1 = type.getDeclaredField(tmp[0]);
+                    if (field1 != null) {
+                        include(field1.getType(), tmp[1]);
+                    }
+                } catch (Throwable e) {
+                }
+            } else {
+                getStringListFormMap(includes, type).add(field);
+            }
+        });
         return this;
     }
 
@@ -91,7 +105,42 @@ public class ResponseMessage implements Serializable {
         if (excludes == null)
             excludes = new HashMap<>();
         if (fields == null || fields.isEmpty()) return this;
-        getStringListFormMap(excludes, type).addAll(fields);
+        fields.forEach(field -> {
+            if (field.contains(".")) {
+                String tmp[] = field.split("[.]", 2);
+                try {
+                    Field field1 = type.getDeclaredField(tmp[0]);
+                    if (field1 != null) {
+                        exclude(field1.getType(), tmp[1]);
+                    }
+                } catch (Throwable e) {
+                }
+            } else {
+                getStringListFormMap(excludes, type).add(field);
+            }
+        });
+        return this;
+    }
+
+    public ResponseMessage exclude(Collection<String> fields) {
+        if (excludes == null)
+            excludes = new HashMap<>();
+        if (fields == null || fields.isEmpty()) return this;
+        Class type;
+        if (data != null) type = data.getClass();
+        else return this;
+        exclude(type, fields);
+        return this;
+    }
+
+    public ResponseMessage include(Collection<String> fields) {
+        if (includes == null)
+            includes = new HashMap<>();
+        if (fields == null || fields.isEmpty()) return this;
+        Class type;
+        if (data != null) type = data.getClass();
+        else return this;
+        include(type, fields);
         return this;
     }
 
@@ -99,6 +148,15 @@ public class ResponseMessage implements Serializable {
         return exclude(type, Arrays.asList(fields));
     }
 
+
+    public ResponseMessage exclude(String... fields) {
+        return exclude(Arrays.asList(fields));
+    }
+
+    public ResponseMessage include(String... fields) {
+        return include(Arrays.asList(fields));
+    }
+
     protected Set<String> getStringListFormMap(Map<Class<?>, Set<String>> map, Class type) {
         Set<String> list = map.get(type);
         if (list == null) {

+ 24 - 20
hsweb-web-dao-impl-mybatis/src/main/java/org/hsweb/web/mybatis/builder/DefaultSqlParamBuilder.java

@@ -1,12 +1,15 @@
 package org.hsweb.web.mybatis.builder;
 
-import org.hsweb.ezorm.meta.FieldMetaData;
-import org.hsweb.ezorm.param.Term;
-import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.beanutils.BeanUtilsBean;
+import org.apache.commons.beanutils.PropertyUtilsBean;
 import org.apache.ibatis.mapping.ResultMap;
 import org.apache.ibatis.mapping.ResultMapping;
+import org.hsweb.ezorm.meta.FieldMetaData;
+import org.hsweb.ezorm.param.Term;
 import org.hsweb.ezorm.render.Dialect;
-import org.hsweb.web.bean.common.*;
+import org.hsweb.web.bean.common.InsertParam;
+import org.hsweb.web.bean.common.QueryParam;
+import org.hsweb.web.bean.common.UpdateParam;
 import org.hsweb.web.mybatis.utils.ResultMapsUtils;
 import org.hsweb.web.mybatis.utils.SqlAppender;
 import org.webbuilder.utils.common.DateTimeUtils;
@@ -35,7 +38,7 @@ public class DefaultSqlParamBuilder {
 
     protected static final Map<Class, String> simpleName = new HashMap<>();
     private static DefaultSqlParamBuilder instance = new DefaultSqlParamBuilder();
-
+   protected PropertyUtilsBean propertyUtils = BeanUtilsBean.getInstance().getPropertyUtils();
     public DefaultSqlParamBuilder() {
         simpleName.put(Integer.class, "int");
         simpleName.put(Byte.class, "byte");
@@ -54,8 +57,6 @@ public class DefaultSqlParamBuilder {
         simpleName.put(short.class, "short");
         simpleName.put(char.class, "char");
         simpleName.put(byte.class, "byte");
-
-
     }
 
     public static DefaultSqlParamBuilder instance() {
@@ -64,8 +65,14 @@ public class DefaultSqlParamBuilder {
 
     public KeyWordMapper getKeyWordMapper(String type) {
         return (paramKey, tableName, term, jdbcType) -> {
+            String termField = term.getField();
+            if (termField.contains(".")) {
+                String[] tmp = termField.split("[.]");
+                tableName = tmp[0];
+                termField = tmp[1];
+            }
             FieldMetaData field = new FieldMetaData();
-            field.setName(term.getField());
+            field.setName(termField);
             field.setJdbcType(jdbcType);
             return getDialect().wrapperWhere(paramKey, term, field, tableName);
         };
@@ -105,7 +112,7 @@ public class DefaultSqlParamBuilder {
         ResultMap resultMaps = ResultMapsUtils.getResultMap(resultMapId);
         Map<String, ResultMapping> mappings = new HashMap<>();
         resultMaps.getResultMappings().forEach(resultMapping -> {
-            if (resultMapping.getNestedQueryId() == null) {
+            if (resultMapping.getNestedQueryId() == null && !resultMapping.getProperty().contains(".")) {
                 mappings.put(resultMapping.getColumn(), resultMapping);
             }
         });
@@ -130,7 +137,6 @@ public class DefaultSqlParamBuilder {
             String values = mappings.keySet().stream().map((f1) -> {
                 SqlAppender appender = new SqlAppender();
                 ResultMapping mapping = mappings.get(f1);
-
                 appender.add("#{data[" + index + "].",
                         mapping.getProperty(),
                         ",javaType=", getJavaType(mapping.getJavaType()),
@@ -152,18 +158,17 @@ public class DefaultSqlParamBuilder {
     public String buildSelectFields(String resultMapId, String tableName, org.hsweb.ezorm.param.SqlParam param) {
         Map<String, Object> fieldConfig = createConfig(resultMapId);
         if (param == null) return "*";
-        Set<String> includes = param.getIncludes(),
-                excludes = param.getExcludes();
-        boolean includesIsEmpty = includes.isEmpty(),
-                excludesIsEmpty = excludes.isEmpty();
-        if (includesIsEmpty && excludesIsEmpty)
-            return "*";
         Map<String, String> propertyMapper = getPropertyMapper(fieldConfig, param);
         SqlAppender appender = new SqlAppender();
         propertyMapper.forEach((k, v) -> {
             if (!appender.isEmpty())
                 appender.add(",");
-            appender.add(tableName, ".", k, " as ").addEdSpc(getQuoteStart(), k, getQuoteEnd());
+            if (!k.contains(".") || k.split("[.]")[0].equals(tableName)) {
+                appender.add(tableName, ".", k, " as ");
+            } else {
+                appender.add(k, " as ");
+            }
+            appender.addEdSpc(getQuoteStart(), k, getQuoteEnd());
         });
         if (appender.isEmpty()) return "*";
         return appender.toString();
@@ -176,7 +181,8 @@ public class DefaultSqlParamBuilder {
         SqlAppender appender = new SqlAppender();
         propertyMapper.forEach((k, v) -> {
             try {
-                Object obj = BeanUtils.getProperty(param.getData(), v);
+                if (v.contains(".")) return;
+                Object obj = propertyUtils.getProperty(param.getData(), v);
                 if (obj != null) {
                     if (!appender.isEmpty())
                         appender.add(",");
@@ -259,8 +265,6 @@ public class DefaultSqlParamBuilder {
             } else if (includes.contains(fieldName) || includes.contains(k)) {
                 propertyMapper.put(k, fieldName);
             }
-
-
         });
         return propertyMapper;
     }