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

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ù)期不符。

要達到預(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)文章

最新評論