Bläddra i källkod

优化sql where条件。支持or和条件嵌套。

周浩 9 år sedan
förälder
incheckning
47d4887f86

+ 3 - 3
hsweb-web-service-impl-common/src/main/java/org/hsweb/web/service/impl/form/DynamicFormServiceImpl.java

@@ -261,7 +261,7 @@ public class DynamicFormServiceImpl implements DynamicFormService {
 
         public static QueryParamProxy build(QueryParam param) {
             QueryParamProxy proxy = new QueryParamProxy();
-            proxy.where(param.getTerm());
+           // proxy.where(param.getTerm());
             proxy.exclude(param.getExcludes());
             proxy.include(param.getIncludes());
             proxy.orderBy(param.getSortOrder(), param.getSortField());
@@ -274,7 +274,7 @@ public class DynamicFormServiceImpl implements DynamicFormService {
     public static class UpdateParamProxy extends org.webbuilder.sql.param.update.UpdateParam {
         public static UpdateParamProxy build(UpdateParam<Map<String, Object>> param) {
             UpdateParamProxy proxy = new UpdateParamProxy();
-            proxy.where(param.getTerm());
+           // proxy.where(param.getTerm());
             proxy.exclude(param.getExcludes());
             proxy.include(param.getIncludes());
             proxy.set(param.getData());
@@ -293,7 +293,7 @@ public class DynamicFormServiceImpl implements DynamicFormService {
     public static class DeleteParamProxy extends org.webbuilder.sql.param.delete.DeleteParam {
         public static DeleteParamProxy build(DeleteParam param) {
             DeleteParamProxy proxy = new DeleteParamProxy();
-            proxy.where(param.getTerm());
+           // proxy.where(param.getTerm());
             return proxy;
         }
     }

+ 11 - 2
hsweb-web-service-impl-common/src/test/java/org/hsweb/web/service/impl/system/DataBaseManagerServiceImplTest.java

@@ -2,6 +2,7 @@ package org.hsweb.web.service.impl.system;
 
 import org.hsweb.web.bean.common.QueryParam;
 import org.hsweb.web.bean.po.module.Module;
+import org.hsweb.web.dao.user.UserMapper;
 import org.hsweb.web.service.impl.AbstractTestCase;
 import org.hsweb.web.service.module.ModuleService;
 import org.hsweb.web.service.system.DataBaseManagerService;
@@ -26,11 +27,19 @@ public class DataBaseManagerServiceImplTest extends AbstractTestCase {
     private SqlExecutor sqlExecutor;
 
     @Resource
-    private ModuleService moduleService;
+    private UserMapper userMapper;
 
     @Test
     public void testGetTableNameList() throws Exception {
-        moduleService.select(new QueryParam().orderBy("sort_index").includes("aaa"));
+        QueryParam queryParam = new QueryParam();
+//        queryParam.nest("name$LIKE", "%admin")
+//                .or("name","1")
+//                .nestOr("name","1")
+//                .and("name","2");
+        queryParam.select("username", "password")
+                .where("create_date$GT", "2015-12-10")
+                .nest("username","admin").or("username", "test");
+        userMapper.select(queryParam);
     }
 
     @Test

+ 34 - 16
hsweb-web-workflow/src/main/java/org/hsweb/web/workflow/controller/model/ActivityModelController.java

@@ -16,9 +16,10 @@ import org.apache.batik.transcoder.TranscoderInput;
 import org.apache.batik.transcoder.TranscoderOutput;
 import org.apache.batik.transcoder.image.PNGTranscoder;
 import org.apache.commons.lang3.StringUtils;
-import org.hsweb.web.core.authorize.annotation.Authorize;
 import org.hsweb.web.bean.common.PagerResult;
 import org.hsweb.web.bean.common.QueryParam;
+import org.hsweb.web.bean.common.TermType;
+import org.hsweb.web.core.authorize.annotation.Authorize;
 import org.hsweb.web.core.exception.NotFoundException;
 import org.hsweb.web.core.logger.annotation.AccessLogger;
 import org.hsweb.web.core.message.ResponseMessage;
@@ -52,22 +53,39 @@ public class ActivityModelController extends BasicController {
     @Authorize(action = "R")
     public ResponseMessage getModelList(QueryParam param) {
         ModelQuery modelQuery = repositoryService.createModelQuery();
-        param.getTerm().forEach((k, v) -> {
-            ValueWrapper valueWrapper = new SimpleValueWrapper(v);
+        param.getTerms().forEach((term) -> {
+
+            ValueWrapper valueWrapper = new SimpleValueWrapper(term.getValue());
             String stringValue = valueWrapper.toString();
-            if ("name$LIKE".equals(k)) modelQuery.modelNameLike(stringValue);
-            else if ("name".equals(k)) modelQuery.modelName(stringValue);
-            else if ("key".equals(k)) modelQuery.modelKey(stringValue);
-            else if ("category".equals(k)) modelQuery.modelCategory(stringValue);
-            else if ("category$LIKE".equals(k)) modelQuery.modelCategoryLike(stringValue);
-            else if ("category$NOT".equals(k)) modelQuery.modelCategoryNotEquals(stringValue);
-            else if ("tenantId".equals(k)) modelQuery.modelTenantId(stringValue);
-            else if ("tenantId$LIKE".equals(k)) modelQuery.modelTenantIdLike(stringValue);
-            else if ("version".equals(k)) {
-                if ("latest".equals(v))
-                    modelQuery.latestVersion();
-                else
-                    modelQuery.modelVersion(valueWrapper.toInt());
+            switch (term.getField()) {
+                case "name":
+                    if (term.getTermType() == TermType.like)
+                        modelQuery.modelNameLike(stringValue);
+                    else
+                        modelQuery.modelName(stringValue);
+                    break;
+                case "key":
+                    modelQuery.modelKey(stringValue);
+                    break;
+                case "category":
+                    if (term.getTermType() == TermType.like) {
+                        modelQuery.modelCategoryLike(stringValue);
+                    } else if (term.getTermType() == TermType.not) {
+                        modelQuery.modelCategoryNotEquals(stringValue);
+                    } else
+                        modelQuery.modelCategory(stringValue);
+                    break;
+                case "tenantId":
+                    if (term.getTermType() == TermType.like)
+                        modelQuery.modelTenantIdLike(stringValue);
+                    else
+                        modelQuery.modelTenantId(stringValue);
+                    break;
+                case "version":
+                    if ("latest".equals(stringValue))
+                        modelQuery.latestVersion();
+                    else
+                        modelQuery.modelVersion(valueWrapper.toInt());
             }
         });
         modelQuery.orderByCreateTime().desc();