mybatis resultmap string,mybatis 查询返回map类型
目录
查询返回映射字符串,对象类型框架返回结果为地图问题
查询返回MapString,Object类型
米巴提斯查询返回映射字符串,对象类型,平时没太注意怎么用,今天又遇到了总结记录一下,方便以后处理此类问题。
Mapper.java中的方法:
@MapKey(userId)MapString,UserInfo personalInfoByUserIds(ListString list);mapper.xml文件中的配置:
结果映射id=基本结果映射 type= com .*.* .实体。 userinfo id column= user _ id JDBC type= VARCHAR property= userId /result column= user _ code JDBC type= INTEGER property= user _ name JDBC type= VARCHAR property= userName /result column= user _ gender JDBC type= INTEGER property= user _ gender /result column= mobile _ phone JDBC type= VARCHAR property= mobile phone /result column=生日返回结果如下:
mybatis返回结果为Map问题
表:成员中的性别列是这样:
女性女性男性女性男性男性男性男性男性
现在我们想统计成员中男女人数分别是多少,很显然返回的结果应该是这样的:
女性: 3
男: 6
对应的可扩展标记语言文件中的查询语句:
选择id=性别计数结果映射=性别计数选择性别,计数(性别)按性别从成员组计数/选择结果映射id=性别计数类型= Java。util。“hashmap”结果列=“gender”属性=“key”Java类型=“Java。郎。string /result column= count property= value Java type= Java。郎。整数//结果映射问题一: 按照常规想法,mybatis 返回的结果应该是 map 对象,并且里面包含两个 entry。
所以,对应的制图人接口应该是这样的子的:
MapString,Integer getgender count();但这样定义接口会异常,大概的意思是:查询结果要么是空,要么是只有一个,而现在却出现多个结果。
这样的报错信息很明显了,映射器接口应该定义成:
ListMapString,Integer getgender count();可扩展标记语言文件中的查询结果是个列表,这个目录中包含两个地图对象,每一个地图对象中只包含一个条目。
(好像使用结果处理器可以让可扩展标记语言中查询的返回结果为地图对象中包含两个进入这种形式)
问题二:列表中有两个地图,那每个地图中的进入是什么呢?同样是按照常规想法,两个地图中应该分别应该是:{女性:3},{男性: 6} .但实际的返回结果是:
[map1:{ key:Femal,value : 3 } map 2: { key : male,value: 6}
所以需要转换成我们期望的类型。
在这个演示中,需要将制图人接口定义成这样子。
ListMapString,Object getgender count();因为价值的类型能是线可能是整数。
对可扩展标记语言查询的ListMapString,对象结果做转化,代码如下:
private MapString,Integer getMetricsLatestVersion(list MapString,Object gender count list){ MapString,Integer gender count=new HashMap();for (MapString,Object kv :性别计数列表){ String key=null整数值=空对于(图EntryString,对象入口:kv。entry set()){ if(entry。getkey().equals( key ){ key=(String)条目。getvalue();} else { value=(Integer)entry。getvalue();} } genderCount.put(key,value);}返回genderCount}以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行它。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。