Commit 939b0c81 authored by liaozan's avatar liaozan 🏀

Distinct sql params

parent 33a54cd2
......@@ -146,12 +146,20 @@ public class StreamUtils {
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) {
return from(data).map(toStringFunction).collect(joining(delimiter));
}
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) {
......
......@@ -32,7 +32,7 @@ public class TreeNodeDao<NODE extends TreeNode> {
}
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) {
......@@ -242,7 +242,7 @@ public class TreeNodeDao<NODE extends TreeNode> {
}
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);
}
......@@ -267,7 +267,7 @@ public class TreeNodeDao<NODE extends TreeNode> {
}
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) {
......
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 <T> String buildInClause(String columnName, Class<T> valueType, List<T> values) {
Set<T> 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
}
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