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

MyBatis將查詢出的兩列數(shù)據(jù)裝配成鍵值對的操作方法

 更新時間:2022年08月08日 15:07:08   作者:jackhb1999  
這篇文章主要介紹了MyBatis將查詢出的兩列數(shù)據(jù)裝配成鍵值對的操作代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

描述:

MyBatis 直接查詢出的格式是 List 套 Map 的結構,當然利用 Stream 流進行轉換也非常便捷,但如果這樣的操作很多的話,不如利用 MyBatis 提供的 ResultHandler 接口進行實現(xiàn),做成工具類使用。

此外,如果用 MyBatis 提供的 @MapKey ,也只是對應值有冗余,因為 MapKey取一個字段為鍵,取出的所有字段為值。

操作:

1. 實現(xiàn) ResultHandler 接口

/**
 * 用于MyBatis查詢庫表中兩列映射為鍵值對
 */
@Component
public class MapResultHandler implements ResultHandler {

    private final HashMap mapResults = new HashMap<String,String>();

    private String key;

    private String value;

    @Override
    public void handleResult(ResultContext resultContext) {
        HashMap map = (HashMap)resultContext.getResultObject();
        mapResults.put(map.get("key"), map.get("value"));
    }
    
    /**
     * 返回映射
     * @return 結果
     */
    public HashMap getMapResults() {
        return mapResults;
    }

    /**
     * @param key key
     * @param value value
     */
    public MapResultHandler(String key, String value) {
        this.key = key;
        this.value = value;
    }

    /**
     * 空構造
     */
    public MapResultHandler() {
    }

}

2. 對應 DAO 層

對應 mapper 查詢接口中,在查詢的方法里將 ResultHandler 實現(xiàn)類(MapResultHandler)以參數(shù)形式傳入。

由于使用實現(xiàn)類拿取裝配好的Map,此處的返回類型為 void 。

 /**
     * 提取<圖片名,創(chuàng)建時間>的Map,對應創(chuàng)建時間進行處理
     * @param imageLength 上傳圖片的個數(shù)
     * @return
     */
    void selectImageNameAndCreatetime(MapResultHandler mapResultHandler, int imageLength);

對應 xml 文件中,定義返回類型為 map 。

其中注意給我們需要的鍵值取別名,對應別名與 ResultHandler 實現(xiàn)類(MapResultHandler)中定義的相對應,這樣在ResultHandler 實現(xiàn)類(MapResultHandler)中 map.get() 才能取到。

<select id="selectImageNameAndCreatetime" resultType="map">
    select name as 'key',time as 'value' from house_pic_info order by id desc limit #{imageLength}
</select>

3. 使用

先實例化 ResultHandler 實現(xiàn)類(MapResultHandler),作為參數(shù)傳入。

取 Map 時依然從 ResultHandler 實現(xiàn)類(MapResultHandler)中取。

MapResultHandler handler = new MapResultHandler();
housePicInfoMapper.selectImageNameAndCreatetime(handler, length);
Map imageMap = handler.getMapResults();

思考:對應 ResultHandler 接口只需實現(xiàn)一個 handleResult 方法,在 MyBatis 中 @MapKey 的實現(xiàn)也應該是有對應實現(xiàn)。

/**
 * MyBatis 中 DefaultMapResultHandler 實現(xiàn)
 * @author Clinton Begin
 */
public class DefaultMapResultHandler<K, V> implements ResultHandler<V> {

  private final Map<K, V> mappedResults;
  private final String mapKey;
  private final ObjectFactory objectFactory;
  private final ObjectWrapperFactory objectWrapperFactory;
  private final ReflectorFactory reflectorFactory;

  @SuppressWarnings("unchecked")
  public DefaultMapResultHandler(String mapKey, ObjectFactory objectFactory, ObjectWrapperFactory objectWrapperFactory, ReflectorFactory reflectorFactory) {
    this.objectFactory = objectFactory;
    this.objectWrapperFactory = objectWrapperFactory;
    this.reflectorFactory = reflectorFactory;
    this.mappedResults = objectFactory.create(Map.class);
    this.mapKey = mapKey;
  }

  @Override
  public void handleResult(ResultContext<? extends V> context) {
    final V value = context.getResultObject();
    final MetaObject mo = MetaObject.forObject(value, objectFactory, objectWrapperFactory, reflectorFactory);
    // TODO is that assignment always true?
    final K key = (K) mo.getValue(mapKey);
    mappedResults.put(key, value);
  }

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

到此這篇關于MyBatis將查詢出的兩列數(shù)據(jù)裝配成鍵值對的文章就介紹到這了,更多相關MyBatis查詢數(shù)據(jù)裝配成鍵值對內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • DecimalFormat數(shù)字格式化 0和# 的區(qū)別及說明

    DecimalFormat數(shù)字格式化 0和# 的區(qū)別及說明

    這篇文章主要介紹了DecimalFormat數(shù)字格式化 0和# 的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • MyBatis如何進行雙重foreach循環(huán)

    MyBatis如何進行雙重foreach循環(huán)

    這篇文章主要介紹了MyBatis如何進行雙重foreach循環(huán),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringBoot文件上傳同時接收復雜參數(shù)的過程詳解

    SpringBoot文件上傳同時接收復雜參數(shù)的過程詳解

    這篇文章主要介紹了SpringBoot文件上傳同時,接收復雜參數(shù),本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • Java實現(xiàn)基于TCP的通訊程序實例解析

    Java實現(xiàn)基于TCP的通訊程序實例解析

    這篇文章主要介紹了Java實現(xiàn)基于TCP的通訊程序實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • java技巧:反射判斷field類型的操作

    java技巧:反射判斷field類型的操作

    這篇文章主要介紹了java技巧:反射判斷field類型的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Java中MessageFormat的使用詳解

    Java中MessageFormat的使用詳解

    本文主要介紹了Java中MessageFormat的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • Java編程實現(xiàn)五子棋人人對戰(zhàn)代碼示例

    Java編程實現(xiàn)五子棋人人對戰(zhàn)代碼示例

    這篇文章主要介紹了Java編程實現(xiàn)五子棋人人對戰(zhàn)代碼示例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-11-11
  • Java實現(xiàn)Floyd算法求最短路徑

    Java實現(xiàn)Floyd算法求最短路徑

    這篇文章主要為大家詳細介紹了Java實現(xiàn)Floyd算法求最短路徑,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Java 中的CharArrayReader 介紹_動力節(jié)點Java學院整理

    Java 中的CharArrayReader 介紹_動力節(jié)點Java學院整理

    CharArrayReader 是字符數(shù)組輸入流。它和ByteArrayInputStream類似,只不過ByteArrayInputStream是字節(jié)數(shù)組輸入流,而CharArray是字符數(shù)組輸入流。CharArrayReader 是用于讀取字符數(shù)組,它繼承于Reader
    2017-05-05
  • Spring Boot構建系統(tǒng)安全層的步驟

    Spring Boot構建系統(tǒng)安全層的步驟

    這篇文章主要介紹了Spring Boot構建系統(tǒng)安全層的步驟,幫助大家更好的理解和學習使用Spring Boot框架,感興趣的朋友可以了解下
    2021-04-04

最新評論

皋兰县| 麻江县| 新疆| 五寨县| 中牟县| 黄大仙区| 两当县| 沽源县| 广丰县| 洛宁县| 海口市| 平江县| 抚州市| 桃园市| 吉水县| 吉木萨尔县| 秦皇岛市| 巴林右旗| 巴里| 霍山县| 吉木萨尔县| 禹州市| 颍上县| 年辖:市辖区| 彰化县| 广元市| 和龙市| 榆林市| 西充县| 东源县| 涿州市| 九寨沟县| 安塞县| 凌源市| 重庆市| 彝良县| 曲周县| 隆回县| 泰来县| 屏南县| 阿鲁科尔沁旗|