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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章