瀏覽代碼

增加sql条件对parent的支持

zhouhao 6 年之前
父節點
當前提交
ff81dd04c2

+ 23 - 2
hsweb-commons/hsweb-commons-dao/hsweb-commons-dao-mybatis/src/main/java/org/hswebframework/web/dao/mybatis/mapper/TreeStructureSqlTermCustomer.java

@@ -1,10 +1,15 @@
 package org.hswebframework.web.dao.mybatis.mapper;
 
+import lombok.extern.slf4j.Slf4j;
 import org.hswebframework.ezorm.core.param.Term;
 import org.hswebframework.ezorm.rdb.meta.RDBColumnMetaData;
 import org.hswebframework.ezorm.rdb.render.SqlAppender;
+import org.hswebframework.ezorm.rdb.render.dialect.Dialect;
+import org.hswebframework.ezorm.rdb.render.dialect.RenderPhase;
+import org.hswebframework.ezorm.rdb.render.dialect.function.SqlFunction;
 import org.hswebframework.ezorm.rdb.render.dialect.term.BoostTermTypeMapper;
 
+import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -12,10 +17,13 @@ import java.util.stream.Collectors;
  * @author zhouhao
  * @since 3.0.0-RC
  */
+@Slf4j
 public abstract class TreeStructureSqlTermCustomer extends AbstractSqlTermCustomer {
     boolean not = false;
 
-    public TreeStructureSqlTermCustomer(String termType, boolean not) {
+    boolean parent = false;
+
+    public TreeStructureSqlTermCustomer(String termType, boolean not,boolean parent) {
         super(termType);
         this.not = not;
     }
@@ -27,6 +35,7 @@ public abstract class TreeStructureSqlTermCustomer extends AbstractSqlTermCustom
     @Override
     public SqlAppender accept(String wherePrefix, Term term, RDBColumnMetaData column, String tableAlias) {
         ChangedTermValue termValue = createChangedTermValue(term);
+        Dialect dialect = column.getTableMetaData().getDatabaseMetaData().getDialect();
 
         List<Object> value = BoostTermTypeMapper.convertList(column, termValue.getOld());
 
@@ -49,7 +58,19 @@ public abstract class TreeStructureSqlTermCustomer extends AbstractSqlTermCustom
             if (i > 0) {
                 termCondition.addSpc("or");
             }
-            termCondition.add("tmp.path like #{", wherePrefix, ".value[", i, "]}");
+            if (parent) {
+                SqlFunction function = dialect.getFunction(SqlFunction.concat);
+                String concat;
+                if (function == null) {
+                    concat = getTableName() + ".path";
+                    log.warn("数据库方言未支持concat函数,你可以调用Dialect.installFunction进行设置!");
+                } else {
+                    concat = function.apply(SqlFunction.Param.of(RenderPhase.where, Arrays.asList("tmp.path", "'%'")));
+                }
+                termCondition.add("#{", wherePrefix, ".value[", i, "]}", " like ", concat);
+            } else {
+                termCondition.add("tmp.path like #{", wherePrefix, ".value[", i, "]}");
+            }
         }
         if (len > 0) {
             termCondition.add(")");