zoukankan      html  css  js  c++  java
  • Spring JdbcTemplate 查询出的Map,是如何产生大小写忽略的Key的?(转)

    原文地址:Spring JdbcTemplate 查询出的Map,是如何产生大小写忽略的Key的?

    原始讨论组:用Spring JdbcTemplate 查询出的Map,是如何产生大小写忽略的Key的?

    Java 是区分大小写的,普通的Map例如HashMap如果其中的key="ABC" value="XXX"
    那么map.get("Abc") 或 map.get("abc")是获取不到值得。

    但Spring中产生了一个忽略大小写的map使我产生了好奇
    例如 jdbcTemplate.queryForList(sql)产生的 List<Map>
    key="BID" value="STR1"

    其中key都是大写的
    但如果用
    System.out.println("map.get(BILLIDS):" + map.get("BID") );
    System.out.println("map.get(billids):" + map.get("bid") );
    System.out.println("map.get(bIlLIds):" + map.get("bId") );
    都可以查出=STR1

    请问这是怎么做到的?

    Spring用的是自己封装的Map:org.springframework.util.LinkedCaseInsensitiveMap,基于java.util.LinkedHashMap封装的。

    LinkedCaseInsensitiveMap有一个成员变量Map caseInsensitiveKeys,小写后的Key与真实key的映射关系,get的时候先把你传入的key转小写得到真实的KEY,然后得到对应value,所以大小写不敏感了。
    但其实key还保持本色的,所以如果序列化为json或者xml格式,key是大写,这是需要注意的。

      public Object put(String key, Object value)
        {
            caseInsensitiveKeys.put(convertKey(key), key);
            return super.put(key, value);
        }

        public Object get(Object key)
        {
            if(key instanceof String)
                return super.get(caseInsensitiveKeys.get(convertKey((String)key)));
            else
                return null;
        }

  • 相关阅读:
    代码走读 airflow 2
    sql 查询相关
    控制你的鼠标和键盘
    TODO
    二进制流的操作收集
    daterangepicker-双日历
    datetimepicker使用
    ADO执行事务
    动态添加表sql
    执行带返回值的存储过程
  • 原文地址:https://www.cnblogs.com/huanghongbo/p/9003314.html
Copyright © 2011-2022 走看看