From 60a0fae0a071ee31e1453e0542e10469aba4736a Mon Sep 17 00:00:00 2001 From: natsufumij Date: Thu, 9 Nov 2023 15:46:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E5=BD=93=E6=9E=84?= =?UTF-8?q?=E9=80=A0=E5=87=BD=E6=95=B0=E5=AD=97=E6=AE=B5=E9=A1=BA=E5=BA=8F?= =?UTF-8?q?=E4=B8=8E=E6=95=B0=E6=8D=AE=E5=BA=93=E5=AD=97=E6=AE=B5=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E9=A1=BA=E5=BA=8F=E4=B8=8D=E4=B8=80=E8=87=B4=E6=97=B6?= =?UTF-8?q?=E5=8F=AF=E8=83=BD=E5=87=BA=E7=8E=B0=E7=9A=84=E6=98=A0=E5=B0=84?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatis/FlexDefaultResultSetHandler.java | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/FlexDefaultResultSetHandler.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/FlexDefaultResultSetHandler.java index 1ed8774a..bf9a84e8 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/FlexDefaultResultSetHandler.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/mybatis/FlexDefaultResultSetHandler.java @@ -763,11 +763,53 @@ public class FlexDefaultResultSetHandler extends DefaultResultSetHandler { ? objectFactory.create(resultType, constructorArgTypes, constructorArgs) : null; } + /** + *

将驼峰转为下划线

+ *
{@code
+     *  var word = underlineByhump("helloWorld")
+     *  //word == "hello_world"
+     * }
+ * @author natsufumij + */ + public static String underlineByhump(String str) { + if (str == null) { + return null; + } + StringBuilder sb = new StringBuilder(); + // 前置字符是否大写 + boolean preCharIsUpperCase = true; + // 当前字符是否大写 + boolean curreCharIsUpperCase = true; + // 下一字符是否大写 + boolean nexteCharIsUpperCase = true; + for (int i = 0; i < str.length(); i++) { + char c = str.charAt(i); + if (i > 0) { + preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1)); + } else { + preCharIsUpperCase = false; + } + curreCharIsUpperCase = Character.isUpperCase(c); + if (i < (str.length() - 1)) { + nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1)); + } + if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase) { + sb.append("_"); + } else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase) { + sb.append("_"); + } + sb.append(Character.toLowerCase(c)); + } + return sb.toString(); + } + + private boolean applyColumnOrderBasedConstructorAutomapping(ResultSetWrapper rsw, List> constructorArgTypes, List constructorArgs, Constructor constructor, boolean foundValues) throws SQLException { for (int i = 0; i < constructor.getParameterTypes().length; i++) { Class parameterType = constructor.getParameterTypes()[i]; - String columnName = rsw.getColumnNames().get(i); + Parameter parameter = constructor.getParameters()[i]; + String columnName = underlineByhump(parameter.getName()); TypeHandler typeHandler = rsw.getTypeHandler(parameterType, columnName); Object value = typeHandler.getResult(rsw.getResultSet(), columnName); constructorArgTypes.add(parameterType);