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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM