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

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值