欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

mybatis 查詢返回Map<String,Object> 類型,平時沒太注意怎么用,今天又遇到了總結(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)計 members 中男女人數(shù)分別是多少,很顯然返回的結(jié)果應(yīng)該是這樣的:

Femal: 3

Male: 6

對應(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 對象,并且里面包含兩個 entry。

所以,對應(yīng)的 mapper 接口應(yīng)該是這樣的子的:

Map<String, Integer> getGenderCount();

但這樣定義接口會異常,大概的意思是:查詢結(jié)果要么是 null,要么是只有一個,而現(xiàn)在卻出現(xiàn)多個結(jié)果。

這樣的報錯信息很明顯了,mapper 接口應(yīng)該定義成:

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

xml 文件中的查詢結(jié)果是個 list,這個 list 中包含兩個 map 對象,每一個 map 對象中只包含一個entry。

(好像使用 resultHandler 可以讓xml中查詢的返回結(jié)果為 map 對象中包含兩個 entry 這種形式)

問題二: list 中有兩個map,那每個 map 中的 entry 是什么呢? 同樣是按照常規(guī)想法,兩個map 中應(yīng)該分別應(yīng)該是:{Femal:3},{Male: 6}。但實際的返回結(jié)果是:

[
map1:{
    key:Femal,
    value: 3
}
map2:{
    key:Male,
    value: 6
}
]

所以需要轉(zhuǎn)換成我們期望的類型。

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

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

因為 value 的類型能是 String 可能是 Integer。

對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;
? }

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

相關(guān)文章

  • springmvc 防止表單重復(fù)提交的兩種方法

    springmvc 防止表單重復(fù)提交的兩種方法

    最近在本地開發(fā)測試的時候,遇到一個表單重復(fù)提交的現(xiàn)象。本文主要介紹了springmvc 防止表單重復(fù)提交的兩種方法,感興趣的可以了解一下
    2021-08-08
  • Java中覆蓋finalize()方法實例代碼

    Java中覆蓋finalize()方法實例代碼

    這篇文章主要介紹了Java中覆蓋finalize()方法實例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 一文帶你深入了解Java中延時任務(wù)的實現(xiàn)

    一文帶你深入了解Java中延時任務(wù)的實現(xiàn)

    延時任務(wù)相信大家都不陌生,在現(xiàn)實的業(yè)務(wù)中應(yīng)用場景可以說是比比皆是。這篇文章主要為大家介紹幾種實現(xiàn)延時任務(wù)的辦法,感興趣的可以了解一下
    2022-11-11
  • Sa-Token中的SaSession對象使用學(xué)習(xí)示例詳解

    Sa-Token中的SaSession對象使用學(xué)習(xí)示例詳解

    這篇文章主要為大家介紹了Sa-Token中的SaSession對象使用學(xué)習(xí)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • 淺析在Java中如何優(yōu)雅的停止一個線程

    淺析在Java中如何優(yōu)雅的停止一個線程

    我們知道在Java中可以通過new Thread().start()創(chuàng)建一個線程,那今天我們就來思考另外一個問題:線程的終止,快跟隨小編一起學(xué)習(xí)起來吧
    2024-03-03
  • Java RMI機制講解

    Java RMI機制講解

    這篇文章主要介紹了Java RMI機制講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 構(gòu)建SpringBoot+MyBatis+Freemarker的項目詳解

    構(gòu)建SpringBoot+MyBatis+Freemarker的項目詳解

    在本篇內(nèi)容里小編給大家整理的是關(guān)于構(gòu)建SpringBoot+MyBatis+Freemarker的項目的具體步驟以及實例代碼,需要的朋友們參考下。
    2019-06-06
  • 手把手教你怎么創(chuàng)建spring項目

    手把手教你怎么創(chuàng)建spring項目

    今天教大家怎么寫spring項目,文中有非常詳細的圖文示例及介紹,對正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • Java面試synchronized偏向鎖后hashcode存址

    Java面試synchronized偏向鎖后hashcode存址

    這篇文章主要為大家介紹了Java面試中synchronized偏向鎖后hashcode存址詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Android開發(fā)中Socket通信的基本實現(xiàn)方法講解

    Android開發(fā)中Socket通信的基本實現(xiàn)方法講解

    這篇文章主要介紹了Android開發(fā)中Socket通信的基本實現(xiàn)方法講解,是安卓上移動互聯(lián)網(wǎng)程序開發(fā)的基礎(chǔ),需要的朋友可以參考下
    2015-12-12

最新評論