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 5a5ece73d2cd..bfc95dfaa9bf 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 @@ protected String underscoreName(String name) { 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();