From cf8a57aaec89e4f4d12d4ee7fc2167f53a45f8fa Mon Sep 17 00:00:00 2001 From: qwding <761945125@qq.com> Date: Fri, 30 Jan 2026 16:46:03 +0800 Subject: [PATCH] Optimize NamedParameterUtils#buildValueArray by lazily fetching SqlParameter This PR optimizes the performance of NamedParameterUtils#buildValueArray by deferring the call to findParameter(declaredParams, paramName, i). Changes: In the original implementation, findParameter was called for every parameter in the loop, regardless of whether the paramValue retrieved from paramSource was already an instance of SqlParameterValue. Since findParameter involves iterating through the declaredParams list (or performing lookups), skipping this call when paramValue instanceof SqlParameterValue is true reduces unnecessary CPU cycles and memory access, especially for queries with a large number of parameters or long declaredParams lists. Signed-off-by: qwding <761945125@qq.com> --- .../jdbc/core/namedparam/NamedParameterUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/namedparam/NamedParameterUtils.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/namedparam/NamedParameterUtils.java index a373681cd170..3c1902a90619 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/namedparam/NamedParameterUtils.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/namedparam/NamedParameterUtils.java @@ -363,12 +363,12 @@ public static String substituteNamedParameters(ParsedSql parsedSql, @Nullable Sq for (int i = 0; i < paramNames.size(); i++) { String paramName = paramNames.get(i); try { - SqlParameter param = findParameter(declaredParams, paramName, i); Object paramValue = paramSource.getValue(paramName); if (paramValue instanceof SqlParameterValue) { paramArray[i] = paramValue; } else { + SqlParameter param = findParameter(declaredParams, paramName, i); paramArray[i] = (param != null ? new SqlParameterValue(param, paramValue) : SqlParameterSourceUtils.getTypedValue(paramSource, paramName)); }