|
@@ -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(")");
|