From 939b0c81295e67c7178cfdfd79d902365914e3ec Mon Sep 17 00:00:00 2001 From: liaozan <378024053@qq.com> Date: Thu, 9 Nov 2023 22:42:23 +0800 Subject: [PATCH] Distinct sql params --- .../com/schbrain/common/util/StreamUtils.java | 10 ++++- .../common/module/tree/dao/TreeNodeDao.java | 6 +-- .../schbrain/framework/dao/util/SQLUtil.java | 42 ++++++++----------- 3 files changed, 29 insertions(+), 29 deletions(-) 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 dd479bd..d00a9a4 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 ed52692..23df4db 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 5cfd055..3d034a9 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 +} -- GitLab