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

Java MyBatis返回兩個字段作為Map的key和value問題

 更新時間:2024年12月14日 10:08:32   作者:天航星  
使用MyBatis查詢兩個字段并返回Map時,需要注意數(shù)據(jù)量和值的類型,直接返回Map會導(dǎo)致報錯,使用@MapKey注解可以生成Map,但值是對象而不是直接值,為了解決這個問題,可以自定義一個Map結(jié)果處理器MapResultHandler

Java MyBatis返回兩個字段作為Map的key和value

使用 MyBatis 時,可能會遇到這種情況:

只查詢兩個字段,需要返回一個 Map,其中第一個字段作為 key,第二個字段作為 value。

這種查詢在某些場景非常好用,比如查詢字典,查詢出的 key 和 value 就是字典的 value 和 label,利用 HashMap 的 get 方法時間復(fù)雜度為 O(1) 的特點,可以實現(xiàn)字典的快速映射。

此時的寫法是有講究的

直接返回 Map:

當(dāng)數(shù)據(jù)量超過 1 時,會報錯。因為此時將 Map 作為一個對象,一個對象不能存儲多個內(nèi)容。

加上 <font style="color:rgb(77, 77, 77);">@MapKey</font>注解:

需要指定返回的哪個字段作為 key。雖然能生成 Map,但其中的 value 是一個對象,不是直接值,與預(yù)期不符。

要達(dá)到預(yù)期的返回值,需要使用 MyBatis 提供的 ResultHandler 結(jié)果處理器。

1.自定義一個 Map結(jié)果處理器

<font style="color:#080808;background-color:#ffffff;">MapResultHandler</font>
public class MapResultHandler<K,V> implements ResultHandler<Map<K,V>> {
    
    private final Map<K,V> mappedResults = new HashMap<>();

    @Override
    public void handleResult(ResultContext context) {
        Map map = (Map) context.getResultObject();
        mappedResults.put((K)map.get("key"), (V)map.get("value"));
    }

    public Map<K,V> getMappedResults() {
        return mappedResults;
    }
}

2.編寫 Mapper.java

void selectMap(MapResultHandler<String, String> mapResultHandler);

如果要傳參,在前面指定即可,比如:

void selectMap(@Param("type") String type, MapResultHandler<String, String> mapResultHandler);

3.編寫 Mapper.xml

<resultMap id="mapResult" type="java.util.HashMap">
    <result property="key" column="value"/>
    <result property="value" column="label"/>
</resultMap>

<select id="selectMap" resultMap="mapResult">
    SELECT
        t1.`value`,
        t1.`label`
    FROM
        sys_dict t1
    WHERE
        t1.`type` = #{type}
        AND t1.`del_flag` = '0'
</select>

4.調(diào)用

MapResultHandler<String, String> resultHandler = new MapResultHandler<>();
baseMapper.selectMapByLanguage(Global.getLanguage(), resultHandler);
Map<String, String> map = resultHandler.getMappedResults();

這樣得到的 Map 就是將兩個字段作為 Map 的 key 和 value 了。

總結(jié)

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

相關(guān)文章

  • Spring控制Bean加載順序的操作方法

    Spring控制Bean加載順序的操作方法

    正常情況下,Spring 容器加載 Bean 的順序是不確定的,那么我們?nèi)绻枰错樞蚣虞d Bean 時應(yīng)如何操作?本文將詳細(xì)講述我們?nèi)绾尾拍芸刂?nbsp;Bean 的加載順序,需要的朋友可以參考下
    2024-05-05
  • 簡介Java編程中的Object類

    簡介Java編程中的Object類

    這篇文章主要介紹了簡介Java編程中的Object類,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • JPA @Query時,無法使用limit函數(shù)的問題及解決

    JPA @Query時,無法使用limit函數(shù)的問題及解決

    這篇文章主要介紹了JPA @Query時,無法使用limit函數(shù)的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java實現(xiàn)FIFO功能的完整代碼實踐

    Java實現(xiàn)FIFO功能的完整代碼實踐

    在軟件開發(fā)中,隊列(Queue)是一種常見的數(shù)據(jù)結(jié)構(gòu),其特點是先進(jìn)先出(FIFO,First In First Out),FIFO 隊列在生產(chǎn)者-消費者模型、任務(wù)調(diào)度、緩沖區(qū)管理等場景中具有廣泛的應(yīng)用,本文給大家介紹了Java實現(xiàn)FIFO功能的完整代碼實踐,需要的朋友可以參考下
    2025-03-03
  • java數(shù)組的初始化及操作詳解

    java數(shù)組的初始化及操作詳解

    在本文中小編給大家整理了關(guān)于java數(shù)組的初始化及操作的相關(guān)知識點內(nèi)容,需要的讀者們參考下。
    2019-07-07
  • Spring中的@PropertySource注解源碼詳細(xì)解析

    Spring中的@PropertySource注解源碼詳細(xì)解析

    這篇文章主要介紹了Spring中的@PropertySource注解源碼詳細(xì)解析,@PropertySource注解,標(biāo)注在配置類@Configuration上面,下面主要分析一下@PropertySource注解的處理過程,也就是怎么把配置信息從.properies文件放到environment中的,需要的朋友可以參考下
    2024-01-01
  • Spring?boot?使用QQ郵箱進(jìn)行一個驗證登入功能

    Spring?boot?使用QQ郵箱進(jìn)行一個驗證登入功能

    這篇文章主要介紹了Spring?boot?使用QQ郵箱進(jìn)行一個驗證登入,主要包括qq郵箱開啟權(quán)限和創(chuàng)建發(fā)送驗證碼的請求Controller,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • Java中對于并發(fā)問題的處理思路分享

    Java中對于并發(fā)問題的處理思路分享

    并發(fā)粗暴的解釋就是一段代碼,在同一時間段內(nèi),被多個線程同時處理的情況就是并發(fā)現(xiàn)象。這篇文章和大家分享了一些對于并發(fā)問題的處理思路,需要的可以參考一下
    2023-02-02
  • 解讀@RabbitListener起作用的原理

    解讀@RabbitListener起作用的原理

    這篇文章主要介紹了解讀@RabbitListener起作用的原理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 如何在Java中使用支付寶SDK來獲取用戶的OpenID

    如何在Java中使用支付寶SDK來獲取用戶的OpenID

    在支付寶開放平臺中,獲取用戶的OpenID通常是在用戶授權(quán)后通過支付寶的OAuth 2.0授權(quán)流程實現(xiàn)的,以下是一個基本的步驟說明,以及如何在Java中使用支付寶SDK來獲取用戶的OpenID
    2024-08-08

最新評論

卢湾区| 汕尾市| 淮滨县| 涿州市| 连平县| 涿州市| 连平县| 正安县| 白城市| 博爱县| 师宗县| 潜江市| 镇康县| 启东市| 布拖县| 大关县| 布尔津县| 天津市| 壶关县| 龙江县| 安庆市| 安庆市| 汪清县| 汶上县| 诸暨市| 兴国县| 泰兴市| 桦甸市| 彰化县| 攀枝花市| 全州县| 台东市| 石屏县| 宜丰县| 沙田区| 黔东| 晋江市| 泽州县| 无棣县| 崇阳县| 得荣县|