用Spring JdbcTemplate 查询出的Map,是如何产生大小写忽略的Key的?

discolt 2007-06-18 11:53:21
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

请问这是怎么做到的?
...全文
2215 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liang30890136 2011-10-19
  • 打赏
  • 举报
回复
是的,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;
}

[Quote=引用 6 楼 pxlfxl2 的回复:]

引用 5 楼 jiaxin1029 的回复:
确实用得是Apache的Commons Collections包
org.apache.commons.collections.map.ListOrderedMap。



瞎说,Spring用的是自己封装的Map:org.springframework.util.LinkedCaseInsensitiveMap,基于java.util.……
[/Quote]
PXLFXL2 2010-03-09
  • 打赏
  • 举报
回复
引用 5 楼 jiaxin1029 的回复:
确实用得是Apache的Commons Collections包
org.apache.commons.collections.map.ListOrderedMap。


瞎说,Spring用的是自己封装的Map:org.springframework.util.LinkedCaseInsensitiveMap,基于java.util.LinkedHashMap封装的。
jiaxin1029 2009-03-06
  • 打赏
  • 举报
回复
确实用得是Apache的Commons Collections包
org.apache.commons.collections.map.ListOrderedMap。
吴恒 2007-06-18
  • 打赏
  • 举报
回复
值的关注。
9441 2007-06-18
  • 打赏
  • 举报
回复
有方法倒也有方法,但不推荐使用

首先看一下生成出map的实现类,重写那个实现类就可以了

但由于改的是java基类的源代码,风险很大的
sbnth 2007-06-18
  • 打赏
  • 举报
回复
如果是这样,我觉得应该是Spring创建了一个map的实现,重载了get方法,把参数key都变成大写或者小写。

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧