This commit is contained in:
Looly 2022-12-14 18:20:05 +08:00
parent 31c5357409
commit 22933829e2

View File

@ -4,6 +4,7 @@ import cn.hutool.core.map.MapUtil;
import cn.hutool.core.text.StrUtil;
import cn.hutool.core.util.ArrayUtil;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@ -72,7 +73,7 @@ public class NamedSql {
* @param paramMap 名和参数的对应Map
*/
private void parse(final String namedSql, final Map<String, Object> paramMap) {
if(MapUtil.isEmpty(paramMap)){
if (MapUtil.isEmpty(paramMap)) {
this.sql = namedSql;
return;
}
@ -118,13 +119,13 @@ public class NamedSql {
* 替换变量如果无变量原样输出到SQL中去
*
* @param nameStartChar 变量开始字符
* @param name 变量名
* @param sqlBuilder 结果SQL缓存
* @param paramMap 变量map非空
* @param name 变量名
* @param sqlBuilder 结果SQL缓存
* @param paramMap 变量map非空
*/
private void replaceVar(final Character nameStartChar, final StringBuilder name, final StringBuilder sqlBuilder, final Map<String, Object> paramMap){
if(name.length() == 0){
if(null != nameStartChar){
private void replaceVar(final Character nameStartChar, final StringBuilder name, final StringBuilder sqlBuilder, final Map<String, Object> paramMap) {
if (name.length() == 0) {
if (null != nameStartChar) {
// 类似于:的情况需要补上:
sqlBuilder.append(nameStartChar);
}
@ -134,20 +135,25 @@ public class NamedSql {
// 变量结束
final String nameStr = name.toString();
if(paramMap.containsKey(nameStr)) {
if (paramMap.containsKey(nameStr)) {
// 有变量对应值值可以为null替换占位符为?变量值放入相应index位置
final Object paramValue = paramMap.get(nameStr);
if(ArrayUtil.isArray(paramValue) && StrUtil.containsIgnoreCase(sqlBuilder, "in")){
Object paramValue = paramMap.get(nameStr);
if ((paramValue instanceof Collection || ArrayUtil.isArray(paramValue)) && StrUtil.containsIgnoreCase(sqlBuilder, "in")) {
if (paramValue instanceof Collection) {
// 转为数组
paramValue = ((Collection<?>) paramValue).toArray();
}
// 可能为select in (xxx)语句则拆分参数为多个参数变成in (?,?,?)
final int length = ArrayUtil.length(paramValue);
for (int i = 0; i < length; i++) {
if(0 != i){
if (0 != i) {
sqlBuilder.append(',');
}
sqlBuilder.append('?');
this.params.add(ArrayUtil.get(paramValue, i));
}
} else{
} else {
sqlBuilder.append('?');
this.params.add(paramValue);
}