mybatis 返回Map类型key改为小写的操作
默认情况下,当resultType=“java.util.Map”时,返回的key值都是大写的。
现在想key改成自己想要的,只需为查询出来的字段增加个别名即可。
如:
selectt.nameas"sName",t.sexas"sSex" fromstudent
as后的双引号很关键,否则不起作用。
补充知识:mybatis返回mapkey值大小写去重,CaseInsensitiveMap、LinkedCaseInsensitiveMap源码
今天在写项目的时候遇见一个问题:
编写的是一套完全解耦的模块,用于利用freemarker模板动态拼接sql
然而拼接好的sql只能用LinkedHashMap返回结果集,保证数据有序,但是在数据输出的时候,mybatis返回了key相同,但大小写不同的数据,
在处理这个数据的时候,首先我选用了利用value值相同去做处理,但是有些数据的value值相同但是key不同
看来只能用key去做处理,首先我用了CaseInsensitiveMap将linkedHashMap的数据放入到CaseInsensitiveMap中,
输出的时候结果确实起到了去重的效果,但是在excel导出的时候要对应header标题头,mybatis查询的顺序跟header抬头是对应的,但是取出的顺序却不是对应的,
因此只能通过排序进行数据对应,但是排序的话只能使用LinkedHashMap去记住顺序
因此查询了资料发现了LinkedCaseInsensitiveMap
LinkedCaseInsensitiveMap继承了LinkedHashMap,可以检测关键字(不区分大小写)的唯一性,所以okbug完美解决
附加LinkedCaseInsensitiveMap源码
packageorg.springframework.util; importjava.util.HashMap; importjava.util.Iterator; importjava.util.LinkedHashMap; importjava.util.Locale; importjava.util.Map; importjava.util.Map.Entry; publicclassLinkedCaseInsensitiveMapextendsLinkedHashMap { privateMap caseInsensitiveKeys; privatefinalLocalelocale; publicLinkedCaseInsensitiveMap(){ this((Locale)null); } publicLinkedCaseInsensitiveMap(Localelocale){ this.caseInsensitiveKeys=newHashMap(); this.locale=locale!=null?locale:Locale.getDefault(); } publicLinkedCaseInsensitiveMap(intinitialCapacity){ this(initialCapacity,(Locale)null); } publicLinkedCaseInsensitiveMap(intinitialCapacity,Localelocale){ super(initialCapacity); this.caseInsensitiveKeys=newHashMap(initialCapacity); this.locale=locale!=null?locale:Locale.getDefault(); } publicVput(Stringkey,Vvalue){ StringoldKey=(String)this.caseInsensitiveKeys.put(this.convertKey(key),key); if(oldKey!=null&&!oldKey.equals(key)){ super.remove(oldKey); } returnsuper.put(key,value); } publicvoidputAll(Mapmap){ if(!map.isEmpty()){ Iteratorvar2=map.entrySet().iterator(); while(var2.hasNext()){ Entryentry=(Entry)var2.next(); this.put((String)entry.getKey(),entry.getValue()); } } } publicbooleancontainsKey(Objectkey){ returnkeyinstanceofString&&this.caseInsensitiveKeys.containsKey(this.convertKey((String)key)); } publicVget(Objectkey){ if(keyinstanceofString){ StringcaseInsensitiveKey=(String)this.caseInsensitiveKeys.get(this.convertKey((String)key)); if(caseInsensitiveKey!=null){ returnsuper.get(caseInsensitiveKey); } } returnnull; } publicVgetOrDefault(Objectkey,VdefaultValue){ if(keyinstanceofString){ StringcaseInsensitiveKey=(String)this.caseInsensitiveKeys.get(this.convertKey((String)key)); if(caseInsensitiveKey!=null){ returnsuper.get(caseInsensitiveKey); } } returndefaultValue; } publicVremove(Objectkey){ if(keyinstanceofString){ StringcaseInsensitiveKey=(String)this.caseInsensitiveKeys.remove(this.convertKey((String)key)); if(caseInsensitiveKey!=null){ returnsuper.remove(caseInsensitiveKey); } } returnnull; } publicvoidclear(){ this.caseInsensitiveKeys.clear(); super.clear(); } publicObjectclone(){ LinkedCaseInsensitiveMapcopy=(LinkedCaseInsensitiveMap)super.clone(); copy.caseInsensitiveKeys=newHashMap(this.caseInsensitiveKeys); returncopy; } protectedStringconvertKey(Stringkey){ returnkey.toLowerCase(this.locale); } }
以上这篇mybatis返回Map类型key改为小写的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。