1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          mybatis resultMap collection聚合String

          來源:互聯網轉載 時間:2024-01-29 08:29:44

          背景

          • 主表index_dict_data

          • 內容表index_dict_cn_name

          • 期望輸出數據結構:即聯表之后根據indexId聚合,然后將cnName字段聚合到一個List<String>

            [    {        "indexId": "pageCrashNum",        "cnNames": ["崩潰數","崩潰數"]    },    {        "indexId": "pageCrashRate",        "cnNames": ["崩潰率","崩潰率"]    },    {        "indexId": "pageCrashUserNum",        "cnNames": ["崩潰用戶數","崩潰用戶數"]    }]

          配置

          mapper.xml

          <resultMap  type="com.wf.indexmetrics.IndexMetricsDictionary">    <result column="indexId" property="indexId"/>    <collection property="cnNames" javaType="list" ofType="java.lang.String">        <!--雖然配置多個字段, 但是只會返回第一個, 但是聚合的時候會加入其他字段作為key-->        <result column="cnName"/>        <!--必須有唯一id, 否則對于相同的cnName為只保留一個-->        <result column="cnNameId"/>    </collection></resultMap><select  resultMap="dictMap">    select    tidd.index_id as indexId,    tidd.dimension as dimension,    cn.cn_name as cnName,    cn.id as cnNameId    FROM    index_dict_data tidd    LEFT JOIN index_dict_cn_name cn ON cn.index_id = tidd.index_id    <where>        and tidd.index_id in        <foreach collection="indexKeys" open="(" separator="," close=")" item="item">            #{item}        </foreach>    </where></select>

          源碼解析

          • org.apache.ibatis.executor.resultset.DefaultResultSetHandler#applyNestedResultMappings
          private boolean applyNestedResultMappings(ResultSetWrapper rsw, ResultMap resultMap, MetaObject metaObject, String parentPrefix, CacheKey parentRowKey, boolean newObject) {    boolean foundValues = false;    for (ResultMapping resultMapping : resultMap.getPropertyResultMappings()) {        final String nestedResultMapId = resultMapping.getNestedResultMapId();        if (nestedResultMapId != null && resultMapping.getResultSet() == null) {            try {                final String columnPrefix = getColumnPrefix(parentPrefix, resultMapping);                final ResultMap nestedResultMap = getNestedResultMap(rsw.getResultSet(), nestedResultMapId, columnPrefix);                if (resultMapping.getColumnPrefix() == null) {                    // try to fill circular reference only when columnPrefix                    // is not specified for the nested result map (issue #215)                    Object ancestorObject = ancestorObjects.get(nestedResultMapId);                    if (ancestorObject != null) {                        if (newObject) {                            linkObjects(metaObject, resultMapping, ancestorObject); // issue #385                        }                        continue;                    }                }                // rowKey實際為-2048015495:-685734919:com.sf.dev.mapper.IndexMetricsDictNewMapper.mapper_resultMap[dictMap]_collection[cnNames]:cnName:崩潰率:cnNameId:1008                final CacheKey rowKey = createRowKey(nestedResultMap, rsw, columnPrefix);                // combinedKey實際為-381970743:-2436525477:com.sf.dev.mapper.IndexMetricsDictNewMapper.mapper_resultMap[dictMap]_collection[cnNames]:cnName:崩潰率:cnNameId:1008:-1750790558:-229051733:com.sf.dev.mapper.IndexMetricsDictNewMapper.dictMap:metricsKey:pageCrashRate:dimension:%                final CacheKey combinedKey = combineKeys(rowKey, parentRowKey);                // 此處通過combinedKey判斷是否已存在值, 如果只有cnName而沒有cnNameId就會判斷已存在, 在后面的邏輯就不會再加入到List                Object rowValue = nestedResultObjects.get(combinedKey);                boolean knownValue = rowValue != null;                instantiateCollectionPropertyIfAppropriate(resultMapping, metaObject); // mandatory                if (anyNotNullColumnHasValue(resultMapping, columnPrefix, rsw)) {                    rowValue = getRowValue(rsw, nestedResultMap, combinedKey, columnPrefix, rowValue);                    if (rowValue != null && !knownValue) {                        // 把cnName add到List                        linkObjects(metaObject, resultMapping, rowValue);                        foundValues = true;                    }                }            } catch (SQLException e) {                throw new ExecutorException("Error getting nested result map values for '" + resultMapping.getProperty() + "'.  Cause: " + e, e);            }        }    }    return foundValues;}

          問題

          • 起初沒有配置cnNameId,保持唯一性,導致相同的cnName只保留了1個,實際應該保留2個

          參考

          • Mybatis resultMap 嵌套集合

          • mybatis 結果映射 collection oftype為string,integer等類型

          標簽:dict.cn-

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          mdf文件是什么格式文件?打開方法?MDF文件是Microsoft SQL server使用的主要數據庫文件格式。企業數據庫程序用于安裝SQL server和相關附加組件的數據庫文件。用戶還可以創建自定義MDF文件。所以您可以使用Microsoft SQL Server軟件打開MDF文件。以下是具體的演示步驟:1。打開Microsoft SQL Server軟件后,右鍵單擊Microsoft SQ...

          成都寵物市場有哪些?成都有很多寵物市場。這里有十個:1.三圣鄉寵物市場。地址:成都市龍泉驛區三圣鄉萬?;ǔ菍櫸锞方諦區。2.青石橋精品寵物花鳥市場。地址:成都市錦江區新開街18號。3.興源寵物市場。地址:成都市武侯區永康路195號。4.成都三聯花鳥寵物市場。地址:成都市龍泉驛區成洛大道5999號。5.九金路寵物市場。地址:成都市武侯區萬柳路。6、花鳥魚蟲寵物。地址:成都市大邑縣天府街72號。7....

          華為mate30屏幕不能做手機秤。華為手機可以當電子秤用。因為華為智能手機有稱重功能。華為手機可以稱重?,F在的華為智能手機屏幕普遍支持3DTouch壓力觸控技術,用戶按壓屏幕的力度可以實現不同的操作。然而,3DTouch顯示器重量的上限只有大約12盎司,337克。在app 希望X手機使用該功能的用戶需要確保手機具備3Dtouch功能,沒有3d touch功能就無法 體重不正常。2.準備好蘋果手機后...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>