mybatis返回結(jié)果為Map問(wèn)題
mybatis返回結(jié)果為Map
表:members
中的gender
列是這樣:
Female Female Male Female Male Male Male Male Male
現(xiàn)在我們想統(tǒng)計(jì) members 中男女人數(shù)分別是多少,很顯然返回的結(jié)果應(yīng)該是這樣的:
Femal: 3
Male: 6
對(duì)應(yīng)的xml文件中的查詢語(yǔ)句:
<select id="genderCount" resultMap="genderCount"> select gender, count(gender) count from members group by gender </select> <resultMap id="genderCount" type="java.util.HashMap"> <result column="gender" property="key" javaType="java.lang.String"/> <result column="count" property="value" javaType="java.lang.Integer"/> </resultMap>
問(wèn)題一
按照常規(guī)想法,mybatis 返回的結(jié)果應(yīng)該是 map 對(duì)象,并且里面包含兩個(gè) entry。
所以,對(duì)應(yīng)的 mapper 接口應(yīng)該是這樣的子的:
Map<String, Integer> getGenderCount();
但這樣定義接口會(huì)異常,大概的意思是:查詢結(jié)果要么是 null,要么是只有一個(gè),而現(xiàn)在卻出現(xiàn)多個(gè)結(jié)果。
這樣的報(bào)錯(cuò)信息很明顯了,mapper 接口應(yīng)該定義成:
List<Map<String, Integer>> getGenderCount();
xml 文件中的查詢結(jié)果是個(gè) list,這個(gè) list 中包含兩個(gè) map 對(duì)象,每一個(gè) map 對(duì)象中只包含一個(gè)entry。
(好像使用 resultHandler
可以讓xml中查詢的返回結(jié)果為 map 對(duì)象中包含兩個(gè) entry 這種形式)
問(wèn)題二
list 中有兩個(gè)map,那每個(gè) map 中的 entry 是什么呢?
同樣是按照常規(guī)想法,兩個(gè)map 中應(yīng)該分別應(yīng)該是:{Femal:3},{Male: 6}。
但實(shí)際的返回結(jié)果是:
[ map1:{ key:Femal, value: 3 } map2:{ key:Male, value: 6 } ]
所以需要轉(zhuǎn)換成我們期望的類(lèi)型。
在這個(gè)demo中,需要將 mapper 接口定義成這樣子。
List<Map<String, Object>> getGenderCount();
因?yàn)?value 的類(lèi)型能是 String 可能是 Integer。
對(duì)xml查詢的 List<Map<String, Object>> 結(jié)果做轉(zhuǎn)化,代碼如下:
private Map<String, Integer> getMetricsLatestVersion( List<Map<String, Object>> genderCountList) { Map<String, Integer> genderCount = new HashMap<>(); for (Map<String, Object> kv : genderCountList) { String key = null; Integer value = null; for (Map.Entry<String, Object> entry : kv.entrySet()) { if (entry.getKey().equals("key")) { key = (String) entry.getValue(); } else { value = (Integer) entry.getValue(); } } genderCount.put(key, value); } return genderCount; }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Apache Shrio安全框架實(shí)現(xiàn)原理及實(shí)例詳解
這篇文章主要介紹了Apache Shrio安全框架實(shí)現(xiàn)原理及實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04JAVA創(chuàng)建和銷(xiāo)毀對(duì)象的方法
本篇文章主要介紹了JAVA創(chuàng)建和銷(xiāo)毀對(duì)象的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02Java Excel透視表相關(guān)操作實(shí)現(xiàn)代碼
這篇文章主要介紹了Java Excel透視表相關(guān)操作實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08String s = new String(''a '') 到底產(chǎn)生幾個(gè)對(duì)象
這篇文章主要介紹了String s = new String(" a ") 到底產(chǎn)生幾個(gè)對(duì)象,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05Spring中的@PostConstruct注解使用方法解析
這篇文章主要介紹了Spring中的@PostConstruct注解使用方法解析,@PostConstruct注解是用來(lái)處理在@Autowired注入屬性后init()方法之前,對(duì)一些零散的屬性進(jìn)行賦值的注解,需要的朋友可以參考下2023-11-11SpringCloud Bus消息總線的實(shí)現(xiàn)
消息總線是一種通信工具,可以在機(jī)器之間互相傳輸消息、文件等,這篇文章主要介紹了SpringCloud Bus消息總線的實(shí)現(xiàn),Spring cloud bus 通過(guò)輕量消息代理連接各個(gè)分布的節(jié)點(diǎn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05在Intellij Idea中使用jstl標(biāo)簽庫(kù)的方法
這篇文章主要介紹了在Intellij Idea中使用jstl標(biāo)簽庫(kù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05