From 6316a353bb074b118ab71ad89fe60553c4d073c9 Mon Sep 17 00:00:00 2001 From: Marten Deinum Date: Tue, 23 Jun 2020 08:14:52 +0200 Subject: [PATCH] Reduce String creation in BeanPropertyRowMapper Prior to this commit the BeanPropertyRowMapper used String.substring and String.toLowerCase to parse the field names. This would generate more String than needed. Instead one could iterate over the internal char[] of the String and use the Character methods instead. This reduces the String creation. Closes gh-25301 --- .../jdbc/core/BeanPropertyRowMapper.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/BeanPropertyRowMapper.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/BeanPropertyRowMapper.java index 5a5ece73d2..bfc95dfaa9 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/BeanPropertyRowMapper.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/BeanPropertyRowMapper.java @@ -247,16 +247,15 @@ public class BeanPropertyRowMapper implements RowMapper { if (!StringUtils.hasLength(name)) { return ""; } + StringBuilder result = new StringBuilder(); - result.append(lowerCaseName(name.substring(0, 1))); - for (int i = 1; i < name.length(); i++) { - String s = name.substring(i, i + 1); - String slc = lowerCaseName(s); - if (!s.equals(slc)) { - result.append("_").append(slc); + for (int i = 0; i < name.length(); i++) { + char s = name.charAt(i); + if (Character.isUpperCase(s)) { + result.append('_').append(Character.toLowerCase(s)); } else { - result.append(s); + result.append(Character.toLowerCase(s)); } } return result.toString();