diff --git a/commons/common-util/src/main/java/com/schbrain/common/util/StreamUtils.java b/commons/common-util/src/main/java/com/schbrain/common/util/StreamUtils.java index dd479bd219856361b3d3e7231a7f4c878f178cde..d00a9a4824c964cb604440ea1c41f1bbabf63736 100644 --- a/commons/common-util/src/main/java/com/schbrain/common/util/StreamUtils.java +++ b/commons/common-util/src/main/java/com/schbrain/common/util/StreamUtils.java @@ -146,12 +146,20 @@ public class StreamUtils { return join(data, delimiter, Objects::toString); } + public static String join(Iterable data, Function toStringFunction) { + return join(data, StrPool.COMMA, toStringFunction); + } + public static String join(Iterable data, String delimiter, Function toStringFunction) { return from(data).map(toStringFunction).collect(joining(delimiter)); } public static List split(String data) { - return split(data, Function.identity()); + return split(data, StrPool.COMMA); + } + + public static List split(String data, String delimiter) { + return split(data, delimiter, Function.identity()); } public static List split(String data, Function mapper) { diff --git a/commons/module-tree/src/main/java/com/schbrain/common/module/tree/dao/TreeNodeDao.java b/commons/module-tree/src/main/java/com/schbrain/common/module/tree/dao/TreeNodeDao.java index ed52692cb820c6decf40f822fe8268255a6b011c..23df4db75abd46da273d63edd4dfc363114dc44e 100644 --- a/commons/module-tree/src/main/java/com/schbrain/common/module/tree/dao/TreeNodeDao.java +++ b/commons/module-tree/src/main/java/com/schbrain/common/module/tree/dao/TreeNodeDao.java @@ -32,7 +32,7 @@ public class TreeNodeDao { } public List listByIds(List ids) { - return baseDao.listByCondition("validate = #{validate} AND " + SQLUtil.buidInClause("id", Long.class, ids), ValidateEnum.VALID.getValue()); + return baseDao.listByCondition("validate = #{validate} AND " + SQLUtil.buildInClause("id", Long.class, ids), ValidateEnum.VALID.getValue()); } public Integer countParent(Long relateId, NODE node, TreeQueryOption option) { @@ -242,7 +242,7 @@ public class TreeNodeDao { } public int updateParentId(List nodeIds, Long parentId) { - String sql = "UPDATE " + baseDao.getTableName() + " SET parent_id = #{parentId} WHERE " + SQLUtil.buidInClause("id", Long.class, nodeIds); + String sql = "UPDATE " + baseDao.getTableName() + " SET parent_id = #{parentId} WHERE " + SQLUtil.buildInClause("id", Long.class, nodeIds); return baseDao.updateByCompleteSql(sql, parentId); } @@ -267,7 +267,7 @@ public class TreeNodeDao { } public int updateNodeByIds(NODE updateNode, List nodeIds) { - return baseDao.updateByCondition(updateNode, SQLUtil.buidInClause("id", Long.class, nodeIds)); + return baseDao.updateByCondition(updateNode, SQLUtil.buildInClause("id", Long.class, nodeIds)); } private String getParentLeftRange(NODE node, TreeQueryOption option, List params) { diff --git a/support/schbrain-base-dao/src/main/java/com/schbrain/framework/dao/util/SQLUtil.java b/support/schbrain-base-dao/src/main/java/com/schbrain/framework/dao/util/SQLUtil.java index 5cfd05596b8163ef9bad9d0ebf62699fc10bf02f..3d034a98a848672cd56952790b24d44a4b3b9024 100644 --- a/support/schbrain-base-dao/src/main/java/com/schbrain/framework/dao/util/SQLUtil.java +++ b/support/schbrain-base-dao/src/main/java/com/schbrain/framework/dao/util/SQLUtil.java @@ -1,11 +1,11 @@ package com.schbrain.framework.dao.util; +import com.schbrain.common.util.StreamUtils; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.util.ClassUtils; -import java.util.List; -import java.util.Objects; -import java.util.stream.Collectors; +import java.util.*; /** * description @@ -14,36 +14,28 @@ import java.util.stream.Collectors; */ public class SQLUtil { - public static String buidInClause(String columnName, Class valueType, List valueList) { + public static String buildInClause(String columnName, Class valueType, List values) { + Set valueList = StreamUtils.filterToSet(values, Objects::nonNull); if (CollectionUtils.isEmpty(valueList)) { throw new IllegalArgumentException("Value list can not be empty."); } - valueList = valueList.stream().filter(Objects::nonNull).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(valueList)) { - throw new IllegalArgumentException("Value list can not be empty."); - } - StringBuilder sb = new StringBuilder(" "); - sb.append(columnName).append(" in ("); - if (Integer.class.isAssignableFrom(valueType) || Long.class.isAssignableFrom(valueType) || - Short.class.isAssignableFrom(valueType) || Byte.class.isAssignableFrom(valueType) || - Double.class.isAssignableFrom(valueType) || Float.class.isAssignableFrom(valueType)) { - sb.append(StringUtils.join(valueList, ',')).append(")"); + StringBuilder builder = new StringBuilder(" "); + builder.append(columnName).append(" in ("); + if (ClassUtils.isPrimitiveWrapper(valueType)) { + builder.append(StreamUtils.join(valueList)).append(")"); } else { - valueList.forEach(e -> { - sb.append("'").append(escapeSql(e)).append("',"); - }); - sb.deleteCharAt(sb.length() - 1).append(")"); + builder.append(StreamUtils.join(valueList, SQLUtil::escapeSql)).append(")"); } - sb.append(" "); - return sb.toString(); + builder.append(" "); + return builder.toString(); } - private static String escapeSql(Object o) { - if (o instanceof String) { - return StringUtils.replace((String) o, "'", "''"); + private static String escapeSql(Object value) { + if (value instanceof String) { + return StringUtils.replace((String) value, "'", "''"); } else { - return String.valueOf(o); + return String.valueOf(value); } } -} \ No newline at end of file +}