zoukankan      html  css  js  c++  java
  • Mybatis 结果映射下划线转驼峰

    Spring Boot 配置:

    #下划线转驼峰
    mybatis.configuration.map-underscore-to-camel-case=true

    mybatis XML 配置

    <configuration>
        <!-- 全局配置 -->
        <settings>
           <!-- 是否开启自动驼峰命名规则(camel case)映射,即从数据库列名 A_COLUMN 到属性名 aColumn 的类似映射 -->
            <setting name="mapUnderscoreToCamelCase" value="true"/>
        </settings>
    </configuration>

    当resultTpye=map时,以上的配置无效


    通过实现ObjectWrapperFactory接口,可以判断当object 是 Map 类型时,返回 true,然后在下面的 getWrapperFor 中返回一个可以处理 key 为驼峰的 Wrapper 类即可。

    实现ObjectWrapperFactory

    Spring boot 配置

    @Configuration
    public class MybatisConfig {
        /**
         * mybatis resultType为map时下划线键值转小写驼峰形式插
         */
        @Bean
        public ConfigurationCustomizer configurationCustomizer() {
            return configuration -> configuration.setObjectWrapperFactory(new MapWrapperFactory());
        }
    
        
        static 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);
            }
        }
    
        static class MyMapWrapper extends MapWrapper {
            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.contains("_"))) {
                    return underlineToCamelhump(name);
                }
                return name;
            }
    
            /**
             * 将下划线风格替换为驼峰风格
             *
             * @param inputString
             * @return
             */
            private 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();
            }
        }
    }

    还需要配置

    Copy
    #下划线转驼峰
    mybatis.configuration.map-underscore-to-camel-case=true

    mybatis XML配置

    Copy
    <objectWrapperFactory type="tk.mybatis.MapWrapperFactory"/>

    还需要

    Copy
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- 其他配置 -->
    </settings>
  • 相关阅读:
    mac 使用指南
    客服系统引用方案
    CSS中margin和padding的区别
    NuGet学习笔记(1)——初识NuGet及快速安装使用
    百度搜索这些词:(百度搜索特效,好玩)
    sql语言:如何查询字符串某个字符的个数?
    Sql日期时间格式转换
    SQL获取当前时间(日期)
    Redis快速入门:初识Redis
    选择Key-Value Store
  • 原文地址:https://www.cnblogs.com/sunshinekevin/p/12502294.html
Copyright © 2011-2022 走看看