• Mybatis 结果映射下划线转驼峰


    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();
            }
        }
    }
    

    还需要配置

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

    mybatis XML配置

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

    还需要

    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- 其他配置 -->
    </settings>
    
  • 相关阅读:
    windows 安装操作系统时切换分区表格式
    parted分区工具用法
    gitlab使用外部的postgresql、外部的redis服务器
    CDN、浏览器缓存
    python自动解析301、302重定向链接
    【WPF】FillRule
    【C#】WM 消息大全
    【转】【C#】SendMessage
    【转】【C#】【Thread】【Task】多线程
    【转】【C#】【Thread】【Parallel】并行计算
  • 原文地址:https://www.cnblogs.com/wilwei/p/10244726.html
Copyright © 2020-2023  润新知