最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis查詢返回Map<String,Object>類型的講解

 更新時(shí)間:2022年06月27日 12:00:16   作者:菜鳥筆記  
這篇文章主要介紹了mybatis查詢返回Map<String,Object>類型的講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

查詢返回Map<String,Object>類型

mybatis 查詢返回Map<String,Object> 類型,平時(shí)沒太注意怎么用,今天又遇到了總結(jié)記錄一下,方便以后處理此類問題。

Mapper.java中的方法:

@MapKey("userId")
Map<String,UserInfo> personalInfoByUserIds(List<String> list);

mapper.xml文件中的配置:

<resultMap id="BaseResultMap" type="com.*.*.entity.UserInfo">
    <id column="user_id" jdbcType="VARCHAR" property="userId" />
    <result column="user_code" jdbcType="INTEGER" property="userCode" />
    <result column="user_name" jdbcType="VARCHAR" property="userName" />
    <result column="user_gender" jdbcType="INTEGER" property="userGender" />
    <result column="mobile_phone" jdbcType="VARCHAR" property="mobilePhone" />
    <result column="birthday" jdbcType="DATE" property="birthday" />
  </resultMap>
 
<select id="personalInfoByUserIds" resultMap="BaseResultMap">
      select * from t_user_info i where i.user_id in
      <foreach collection="list" item="item" separator="," open="(" close=")" index="index">
        #{item}
      </foreach>
</select>

返回結(jié)果如下:

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文件中的查詢語句:

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

問題一: 按照常規(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 這種形式)

問題二: 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)換成我們期望的類型。

在這個(gè)demo中,需要將 mapper 接口定義成這樣子。

List<Map<String, Object>> getGenderCount();

因?yàn)?value 的類型能是 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;
? }

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java線程同步操作實(shí)例詳解

    java線程同步操作實(shí)例詳解

    這篇文章主要介紹了java線程同步操作,結(jié)合實(shí)例形式分析了Java線程同步與鎖機(jī)制相關(guān)原理、操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-09-09
  • maven依賴傳遞和依賴沖突原理

    maven依賴傳遞和依賴沖突原理

    這篇文章主要介紹了maven依賴傳遞和依賴沖突原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Maven生成可直接運(yùn)行的jar包(多種方式)

    Maven生成可直接運(yùn)行的jar包(多種方式)

    文章介紹了三種使用Maven生成可以直接運(yùn)行的jar包的方法:通過maven-jar-plugin和maven-dependency-plugin插件、maven-assembly-plugin插件以及maven-shade-plugin插件,每種方法都有其特點(diǎn)和適用場(chǎng)景,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • SpringBoot中的@FeignClient注解使用

    SpringBoot中的@FeignClient注解使用

    文章主要介紹了SpringCloud中的@FeignClient注解的使用及其參數(shù)詳解,包括value/name、url、path、configuration、fallback/fallbackFactory、contextId等,通過@FeignClient注解,可以方便地聲明一個(gè)REST客戶端,并定義與目標(biāo)服務(wù)通信的接口
    2024-11-11
  • Java利用InputStream類實(shí)現(xiàn)文件讀取與處理

    Java利用InputStream類實(shí)現(xiàn)文件讀取與處理

    在Java開發(fā)中,輸入流(InputStream)是一個(gè)非常重要的概念,它涉及到文件讀寫、網(wǎng)絡(luò)傳輸?shù)榷鄠€(gè)方面,InputStream類是Java中輸入流的抽象基類,定義了讀取輸入流數(shù)據(jù)的方法,本文將以InputStream類為切入點(diǎn),介紹Java中的輸入流概念及其應(yīng)用,需要的朋友可以參考下
    2023-11-11
  • 在springboot中使用AOP進(jìn)行全局日志記錄

    在springboot中使用AOP進(jìn)行全局日志記錄

    這篇文章主要介紹就在springboot中使用AOP進(jìn)行全局日志記錄,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • jackson 實(shí)現(xiàn)null轉(zhuǎn)0 以及0轉(zhuǎn)null的示例代碼

    jackson 實(shí)現(xiàn)null轉(zhuǎn)0 以及0轉(zhuǎn)null的示例代碼

    這篇文章主要介紹了jackson 實(shí)現(xiàn)null轉(zhuǎn)0 以及0轉(zhuǎn)null的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java模擬實(shí)現(xiàn)QQ三方登錄(單點(diǎn)登錄2.0)

    Java模擬實(shí)現(xiàn)QQ三方登錄(單點(diǎn)登錄2.0)

    這篇文章主要為大家詳細(xì)介紹了Java模擬實(shí)現(xiàn)QQ三方登錄,單點(diǎn)登錄2.0,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • @ConfigurationProperties加載外部配置方式

    @ConfigurationProperties加載外部配置方式

    這篇文章主要介紹了@ConfigurationProperties加載外部配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java?JDK內(nèi)置常用接口和深淺拷貝

    Java?JDK內(nèi)置常用接口和深淺拷貝

    這篇文章主要介紹了Java?JDK內(nèi)置常用接口和深淺拷貝,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-06-06

最新評(píng)論

屏山县| 福泉市| 峨眉山市| 桃园市| 惠水县| 雅江县| 万全县| 保康县| 云南省| 阿克| 沂南县| 桃园市| 保山市| 易门县| 三门峡市| 东乡县| 湟源县| 留坝县| 新巴尔虎左旗| 贵港市| 即墨市| 邯郸县| 新泰市| 新建县| 钟山县| 白沙| 新绛县| 石门县| 宁河县| 胶州市| 曲麻莱县| 尼玛县| 南郑县| 大连市| 荆州市| 鲁甸县| 佛学| 叙永县| 色达县| 临武县| 儋州市|