Explorar el Código

mybatis返回结果集map key转驼峰

xuezizhuo hace 1 año
padre
commit
4236e2f933

+ 4 - 2
ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml

@@ -14,7 +14,9 @@ PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 		<!-- 指定 MyBatis 所用日志的具体实现 -->
         <setting name="logImpl"                  value="SLF4J"  />
         <!-- 使用驼峰命名法转换字段 -->
-		<!-- <setting name="mapUnderscoreToCamelCase" value="true"/> -->
+		 <setting name="mapUnderscoreToCamelCase" value="true"/>
 	</settings>
-	
+    <objectWrapperFactory type="com.ruoyi.common.utils.MapWrapperFactory"/>
+
+
 </configuration>

+ 19 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/MapWrapperFactory.java

@@ -0,0 +1,19 @@
+package com.ruoyi.common.utils;
+
+import org.apache.ibatis.reflection.MetaObject;
+import org.apache.ibatis.reflection.wrapper.ObjectWrapper;
+import org.apache.ibatis.reflection.wrapper.ObjectWrapperFactory;
+
+import java.util.Map;
+
+public class MapWrapperFactory implements ObjectWrapperFactory {
+    @Override
+    public boolean hasWrapperFor(Object object) {
+        return object != null && object instanceof Map;
+    }
+
+    @Override
+    public ObjectWrapper getWrapperFor(MetaObject metaObject, Object object) {
+        return new MyMapWrapper(metaObject, (Map) object);
+    }
+}

+ 51 - 0
ruoyi-common/src/main/java/com/ruoyi/common/utils/MyMapWrapper.java

@@ -0,0 +1,51 @@
+package com.ruoyi.common.utils;
+
+import org.apache.ibatis.reflection.MetaObject;
+import org.apache.ibatis.reflection.wrapper.MapWrapper;
+
+import java.util.Map;
+
+public class MyMapWrapper extends MapWrapper {
+
+    public MyMapWrapper(MetaObject metaObject, Map<String, Object> map) {
+        super(metaObject, map);
+    }
+
+    @Override
+    public String findProperty(String name, boolean useCamelCaseMapping) {
+        if (useCamelCaseMapping
+                && ((name.charAt(0) >= 'A' && name.charAt(0) <= 'Z')
+                || name.indexOf("_") >= 0)) {
+            return underlineToCamelhump(name);
+        }
+        return name;
+    }
+
+    /**
+     * 将下划线风格替换为驼峰风格
+     *
+     * @param inputString
+     * @return
+     */
+    public String underlineToCamelhump(String inputString) {
+        StringBuilder sb = new StringBuilder();
+
+        boolean nextUpperCase = false;
+        for (int i = 0; i < inputString.length(); i++) {
+            char c = inputString.charAt(i);
+            if (c == '_') {
+                if (sb.length() > 0) {
+                    nextUpperCase = true;
+                }
+            } else {
+                if (nextUpperCase) {
+                    sb.append(Character.toUpperCase(c));
+                    nextUpperCase = false;
+                } else {
+                    sb.append(Character.toLowerCase(c));
+                }
+            }
+        }
+        return sb.toString();
+    }
+}