Commit 939b0c81 authored by liaozan's avatar liaozan 🏀

Distinct sql params

parent 33a54cd2
...@@ -146,12 +146,20 @@ public class StreamUtils { ...@@ -146,12 +146,20 @@ public class StreamUtils {
return join(data, delimiter, Objects::toString); return join(data, delimiter, Objects::toString);
} }
public static <T> String join(Iterable<T> data, Function<T, String> toStringFunction) {
return join(data, StrPool.COMMA, toStringFunction);
}
public static <T> String join(Iterable<T> data, String delimiter, Function<T, String> toStringFunction) { public static <T> String join(Iterable<T> data, String delimiter, Function<T, String> toStringFunction) {
return from(data).map(toStringFunction).collect(joining(delimiter)); return from(data).map(toStringFunction).collect(joining(delimiter));
} }
public static List<String> split(String data) { public static List<String> split(String data) {
return split(data, Function.identity()); return split(data, StrPool.COMMA);
}
public static List<String> split(String data, String delimiter) {
return split(data, delimiter, Function.identity());
} }
public static <T> List<T> split(String data, Function<String, T> mapper) { public static <T> List<T> split(String data, Function<String, T> mapper) {
......
...@@ -32,7 +32,7 @@ public class TreeNodeDao<NODE extends TreeNode> { ...@@ -32,7 +32,7 @@ public class TreeNodeDao<NODE extends TreeNode> {
} }
public List<NODE> listByIds(List<Long> ids) { public List<NODE> listByIds(List<Long> 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) { public Integer countParent(Long relateId, NODE node, TreeQueryOption option) {
...@@ -242,7 +242,7 @@ public class TreeNodeDao<NODE extends TreeNode> { ...@@ -242,7 +242,7 @@ public class TreeNodeDao<NODE extends TreeNode> {
} }
public int updateParentId(List<Long> nodeIds, Long parentId) { public int updateParentId(List<Long> 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); return baseDao.updateByCompleteSql(sql, parentId);
} }
...@@ -267,7 +267,7 @@ public class TreeNodeDao<NODE extends TreeNode> { ...@@ -267,7 +267,7 @@ public class TreeNodeDao<NODE extends TreeNode> {
} }
public int updateNodeByIds(NODE updateNode, List<Long> nodeIds) { public int updateNodeByIds(NODE updateNode, List<Long> 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<Object> params) { private String getParentLeftRange(NODE node, TreeQueryOption option, List<Object> params) {
......
package com.schbrain.framework.dao.util; package com.schbrain.framework.dao.util;
import com.schbrain.common.util.StreamUtils;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.util.ClassUtils;
import java.util.List; import java.util.*;
import java.util.Objects;
import java.util.stream.Collectors;
/** /**
* description * description
...@@ -14,36 +14,28 @@ import java.util.stream.Collectors; ...@@ -14,36 +14,28 @@ import java.util.stream.Collectors;
*/ */
public class SQLUtil { public class SQLUtil {
public static String buidInClause(String columnName, Class<?> valueType, List<?> valueList) { public static <T> String buildInClause(String columnName, Class<T> valueType, List<T> values) {
Set<T> valueList = StreamUtils.filterToSet(values, Objects::nonNull);
if (CollectionUtils.isEmpty(valueList)) { if (CollectionUtils.isEmpty(valueList)) {
throw new IllegalArgumentException("Value list can not be empty."); throw new IllegalArgumentException("Value list can not be empty.");
} }
valueList = valueList.stream().filter(Objects::nonNull).collect(Collectors.toList()); StringBuilder builder = new StringBuilder(" ");
if (CollectionUtils.isEmpty(valueList)) { builder.append(columnName).append(" in (");
throw new IllegalArgumentException("Value list can not be empty."); if (ClassUtils.isPrimitiveWrapper(valueType)) {
} builder.append(StreamUtils.join(valueList)).append(")");
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(")");
} else { } else {
valueList.forEach(e -> { builder.append(StreamUtils.join(valueList, SQLUtil::escapeSql)).append(")");
sb.append("'").append(escapeSql(e)).append("',");
});
sb.deleteCharAt(sb.length() - 1).append(")");
} }
sb.append(" "); builder.append(" ");
return sb.toString(); return builder.toString();
} }
private static String escapeSql(Object o) { private static String escapeSql(Object value) {
if (o instanceof String) { if (value instanceof String) {
return StringUtils.replace((String) o, "'", "''"); return StringUtils.replace((String) value, "'", "''");
} else { } else {
return String.valueOf(o); return String.valueOf(value);
} }
} }
} }
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment