From 0317a9e56150b7e81c9b79de54359fea331637e1 Mon Sep 17 00:00:00 2001 From: ZhouXY108 Date: Wed, 28 May 2025 17:30:28 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=B0=86=20`DefaultBeanRowMapper`?= =?UTF-8?q?=20=E4=B8=AD=E7=9A=84=E5=B1=9E=E6=80=A7=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E6=98=A0=E5=B0=84=E9=80=BB=E8=BE=91=E6=8A=BD=E5=8F=96=E5=88=B0?= =?UTF-8?q?=E6=96=B0=E7=9A=84=E6=96=B9=E6=B3=95=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xyz/zhouxy/jdbc/DefaultBeanRowMapper.java | 52 ++++++++++++------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/src/main/java/xyz/zhouxy/jdbc/DefaultBeanRowMapper.java b/src/main/java/xyz/zhouxy/jdbc/DefaultBeanRowMapper.java index 901ba84..8a9b915 100644 --- a/src/main/java/xyz/zhouxy/jdbc/DefaultBeanRowMapper.java +++ b/src/main/java/xyz/zhouxy/jdbc/DefaultBeanRowMapper.java @@ -94,25 +94,7 @@ public class DefaultBeanRowMapper implements RowMapper { Constructor constructor = beanType.getDeclaredConstructor(); constructor.setAccessible(true); // NOSONAR - // 构建 column name 和 PropertyDescriptor 的 映射 - BeanInfo beanInfo = Introspector.getBeanInfo(beanType); - PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); - - // Bean 的属性名为小驼峰,对应的列名为下划线 - Function keyMapper; - if (propertyColMap == null || propertyColMap.isEmpty()) { - keyMapper = p -> CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, p.getName()); - } - else { - keyMapper = p -> { - String propertyName = p.getName(); - String colName = propertyColMap.get(propertyName); - return colName != null ? colName - : CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, propertyName); - }; - } - Map colPropertyMap = Arrays.stream(propertyDescriptors).collect( - Collectors.toMap(keyMapper, Function.identity(), (a, b) -> b)); + final Map colPropertyMap = buildColPropertyMap(beanType, propertyColMap); return new DefaultBeanRowMapper<>(constructor, colPropertyMap); } catch (IntrospectionException e) { @@ -150,4 +132,36 @@ public class DefaultBeanRowMapper implements RowMapper { throw new SQLException(e); } } + + /** + * 构建 column name 和 PropertyDescriptor 的 映射 + * + * @param Java bean 类型 + * @param beanType Java bean 类型 + * @param propertyColMap 属性与列名的映射 + * @return column name 和 PropertyDescriptor 的映射 + * @throws IntrospectionException if an exception occurs during introspection. + */ + private static Map buildColPropertyMap( + Class beanType, Map propertyColMap) throws IntrospectionException { + + BeanInfo beanInfo = Introspector.getBeanInfo(beanType); + PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors(); + + // Bean 的属性名为小驼峰,对应的列名为下划线 + Function keyMapper; + if (propertyColMap == null || propertyColMap.isEmpty()) { + keyMapper = p -> CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, p.getName()); + } + else { + keyMapper = p -> { + String propertyName = p.getName(); + String colName = propertyColMap.get(propertyName); + return colName != null ? colName + : CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, propertyName); + }; + } + return Arrays.stream(propertyDescriptors) + .collect(Collectors.toMap(keyMapper, Function.identity(), (a, b) -> b)); + } }