Browse Source

修复关联查询也被标记为列的bug.比如 creator.name,应该解析为create."name".

周浩 9 years ago
parent
commit
08c56314c0

+ 13 - 4
hsweb-web-dao-impl-mybatis/src/main/java/org/hsweb/web/mybatis/builder/DefaultSqlParamBuilder.java

@@ -62,6 +62,15 @@ public class DefaultSqlParamBuilder {
         return instance;
     }
 
+    public String encodeFiled(String field) {
+        if (field.contains(".")) {
+            String[] tmp = field.split("[.]");
+            return tmp[0] + "." + getDialect().getQuoteStart() + (filedToUpperCase() ? (tmp[1].toUpperCase()) : tmp[1]) + getDialect().getQuoteEnd();
+        } else {
+            return getDialect().getQuoteStart() + (filedToUpperCase() ? (field.toUpperCase()) : field) + getDialect().getQuoteEnd();
+        }
+    }
+
     public KeyWordMapper getKeyWordMapper(String type) {
         return (paramKey, tableName, term, jdbcType) -> {
             String termField = term.getField();
@@ -124,7 +133,7 @@ public class DefaultSqlParamBuilder {
         }
         param.setData(listData);
         String fields = mappings.keySet().stream()
-                .map(str -> new SqlAppender().add(getDialect().getQuoteStart(), filedToUpperCase() ? str.toUpperCase() : str, getDialect().getQuoteEnd()).toString())
+                .map(str -> new SqlAppender().add(encodeFiled(str), "").toString())
                 .reduce((f1, f2) -> new SqlAppender().add(f1, ",", f2)
                         .toString()).get();
         //批量
@@ -166,9 +175,9 @@ public class DefaultSqlParamBuilder {
             if (!appender.isEmpty())
                 appender.add(",");
             if (!k.contains(".") || k.split("[.]")[0].equals(tableName)) {
-                appender.add(tableName, ".", getDialect().getQuoteStart(), filedToUpperCase() ? k.toUpperCase() : k, getDialect().getQuoteEnd(), " as ");
+                appender.add(tableName, ".", encodeFiled(k), " as ");
             } else {
-                appender.add(getDialect().getQuoteStart(),  filedToUpperCase() ? k.toUpperCase() : k, getDialect().getQuoteEnd(), " as ");
+                appender.add(encodeFiled(k), " as ");
             }
             appender.addEdSpc(getDialect().getQuoteStart(), k, getDialect().getQuoteEnd());
         });
@@ -189,7 +198,7 @@ public class DefaultSqlParamBuilder {
                     if (!appender.isEmpty())
                         appender.add(",");
                     Map<String, Object> config = ((Map) fieldConfig.get(k));
-                    appender.add(getDialect().getQuoteStart(), filedToUpperCase() ? k.toUpperCase() : k, getDialect().getQuoteEnd(), "=", "#{data.", v);
+                    appender.add(encodeFiled(k), "=", "#{data.", v);
                     if (config != null) {
                         Object jdbcType = config.get("jdbcType"),
                                 javaType = config.get("javaType");