主表index_dict_data
內容表index_dict_cn_name
期望輸出數據結構:即聯表之后根據indexId聚合,然后將cnName字段聚合到一個List<String>中
[ { "indexId": "pageCrashNum", "cnNames": ["崩潰數","崩潰數"] }, { "indexId": "pageCrashRate", "cnNames": ["崩潰率","崩潰率"] }, { "indexId": "pageCrashUserNum", "cnNames": ["崩潰用戶數","崩潰用戶數"] }]
<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>
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;}
Mybatis resultMap 嵌套集合
mybatis 結果映射 collection oftype為string,integer等類型
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
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.準備好蘋果手機后...