The paging of a large database resultset in Web applications is a well known pro...
whereo.user_id=10order byo.order_id desc limit 2,3分析下面这段Java代码是如何对结果进行合并的: result = new ShardingResultSet(resultSets..., selectStatement.getOrderByItems()); } return new IteratorStreamResultSetMerger(resultSets);}...(final List resultSets) throws SQLException { // 遍历resultSets--在多少个目标实际表上执行SQL,该集合的size...,方便接下来迭代取得结果; this.resultSets = resultSets.iterator(); // 重置currentResultSet setCurrentResultSet...(this.resultSets.next());} END
= resultSets; this.selectStatement = selectStatement; // 获得 查询列名与位置映射 columnLabelIndexMap =...getColumnLabelIndexMap(resultSets.get(0)); } /** * 获得 查询列名与位置映射 * * @param resultSet 结果集 * @return...()); this.nullOrderType = nullOrderType; orderResultSetsToQueue(resultSets);...; public IteratorStreamResultSetMerger(final List resultSets) { this.resultSets...hasNext && resultSets.hasNext()) { setCurrentResultSet(resultSets.next()); hasNext
areabiz = virtualBusinessService.getAreaBiz(MerchantId); if(null == areabiz){ resultSets.addValue...(ResultSets.OpType.INSERT,"BIZAREALISTNAME",bizAreaName); resultSets.addValue(ResultSets.OpType.INSERT..., "BIZAREAURL", bizAreaUrl); resultSets.addValue(ResultSets.OpType.INSERT, "BIZADDRESS...address); logger.info("VirtualTradeAreaAlgorithm="+MerchantId); return resultSets
接下来的分析都是基于这条SQL; ExecutorEngine.build()方法中通过 returnnewGroupByMemoryResultSetMerger(columnLabelIndexMap,resultSets...GroupByMemoryResultSetMerger( final Map labelAndIndexMap, final List resultSets...就是并发在多个实际表执行返回的结果集合,在多少个实际表上执行,resultSets的size就有多大; memoryResultSetRows = init(resultSets);} 在实际表torder0...NEW, "countuserid":3}]} init()方法源码如下: private Iterator init(final List resultSets...= new HashMap(1024); // 遍历多个实际表执行返回的结果集合中所有的结果,即2个实际表每个实际表3条结果,总计6条结果 for (ResultSet each : resultSets
selectStatement.isSameGroupByAndOrderByItems()) { return new GroupByStreamResultSetMerger(columnLabelIndexMap, resultSets...selectStatement); } else { return new GroupByMemoryResultSetMerger(columnLabelIndexMap, resultSets...selectStatement.getOrderByItems().isEmpty()) { return new OrderByStreamResultSetMerger(resultSets..., selectStatement.getOrderByItems()); } return new IteratorStreamResultSetMerger(resultSets);}/...GroupByStreamResultSetMerger( final Map labelAndIndexMap, final List resultSets
cleanUpAfterHandlingResultSet(); resultSetCount++; } // 从 mappedStatement 取出结果集 String[] resultSets...= mappedStatement.getResultSets(); if (resultSets !...= null && resultSetCount < resultSets.length) { ResultMapping parentMapping = nextResultMaps.get...(resultSets[resultSetCount]); if (parentMapping !...rsw, resultMap, resultHandler, rowBounds, null); } } } finally { // issue #228 (close resultsets
private String databaseId; private Log statementLog; private LanguageDriver lang; private String[] resultSets...keyGenerator, String keyProperty, String keyColumn, String databaseId, LanguageDriver lang, String resultSets...keyProperty).keyColumn(keyColumn).databaseId(databaseId).lang(lang) .resultOrdered(resultOrdered).resultSets...(resultSets) .resultMaps(getStatementResultMaps(resultMap, resultType, id)).resultSetType(resultSetType
resultSetCount++; 19 } 20 // 获取多个结果集,多结果集一般出现在存储过程中,返回多个ResultSet // mappedStatement.resultSets...属性列出多了结果集的名称,用逗号分隔 // 多结果集的处理不是重点,暂时不分析 21 String[] resultSets = mappedStatement.getResultSets...(); 22 if (resultSets !...= null && resultSetCount < resultSets.length) { 24 ResultMapping parentMapping = nextResultMaps.get...(resultSets[resultSetCount]); 25 if (parentMapping !
statementAnnotation.getDatabaseId(), languageDriver, // ResultSets...nullOrEmpty(options.resultSets()) : null); }); }parseStatement这里解析带有Select.class, Update.class...String keyProperty, String keyColumn, String databaseId, LanguageDriver lang, String resultSets...keyColumn) .databaseId(databaseId) .lang(lang) .resultOrdered(resultOrdered) .resultSets...(resultSets) .resultMaps(getStatementResultMaps(resultMap, resultType, id)) .resultSetType
statementAnnotation.getDatabaseId(), languageDriver, // ResultSets...nullOrEmpty(options.resultSets()) : null); }); } parseStatement这里解析带有Select.class, Update.class...keyProperty, String keyColumn, String databaseId, LanguageDriver lang, String resultSets....databaseId(databaseId) .lang(lang) .resultOrdered(resultOrdered) .resultSets...(resultSets) .resultMaps(getStatementResultMaps(resultMap, resultType, id)) .resultSetType
getNextResultSet(stmt); cleanUpAfterHandlingResultSet(); resultSetCount++; } String[] resultSets...= mappedStatement.getResultSets(); if (resultSets !...= null && resultSetCount < resultSets.length) { ResultMapping parentMapping = nextResultMaps.get...(resultSets[resultSetCount]); if (parentMapping !
SqlSource sqlSource = langDriver.createSqlSource(configuration, context, parameterTypeClass); String resultSets...= context.getStringAttribute("resultSets"); String keyProperty = context.getStringAttribute("keyProperty...flushCache, useCache, resultOrdered, keyGenerator, keyProperty, keyColumn, databaseId, langDriver, resultSets
= context.getStringAttribute("resultSets"); builderAssistant.addMappedStatement(id, sqlSource, statementType...flushCache, useCache, resultOrdered, keyGenerator, keyProperty, keyColumn, databaseId, langDriver, resultSets...keyGenerator, String keyProperty, String keyColumn, String databaseId, LanguageDriver lang, String resultSets....keyColumn(keyColumn) .databaseId(databaseId) .lang(lang) .resultOrdered(resultOrdered) .resultSets...(resultSets) .resultMaps(getStatementResultMaps(resultMap, resultType, id)) .resultSetType(resultSetType
getNextResultSet(stmt); cleanUpAfterHandlingResultSet(); resultSetCount++; } String[] resultSets...= mappedStatement.getResultSets(); if (resultSets !...= null && resultSetCount < resultSets.length) { ResultMapping parentMapping = nextResultMaps.get...(resultSets[resultSetCount]); if (parentMapping !...rsw, resultMap, resultHandler, rowBounds, null); } } } finally { // issue #228 (close resultsets
rsw = getNextResultSet(stmt); cleanUpAfterHandlingResultSet(); resultSetCount++; } String[] resultSets...= mappedStatement.getResultSets(); if (resultSets !...= null && resultSetCount < resultSets.length) { ResultMapping parentMapping = nextResultMaps.get(...resultSets[resultSetCount]); if (parentMapping !...handleRowValues(rsw, resultMap, resultHandler, rowBounds, null); } } } finally { // issue #228 (close resultsets
icecream.shop::sell'); var result = fnSell('CHOCOLATE', 3, 30.0); var change = result['change']; var resultSets...= result['$resultSets']; var params; for (var outputParam in result) { params += outputParam + ' ';...} 这样可用访问结果集,最好访问结果集的JSON格式,还要注意一点$ resultSets不可枚举。
SqlSource sqlSource = langDriver.createSqlSource(configuration, context, parameterTypeClass); String resultSets...= context.getStringAttribute("resultSets"); String keyProperty = context.getStringAttribute("keyProperty...keyProperty, String keyColumn, String databaseId, LanguageDriver lang, String resultSets....databaseId(databaseId) .lang(lang) .resultOrdered(resultOrdered) .resultSets...(resultSets) .resultMaps(getStatementResultMaps(resultMap, resultType, id)) .resultSetType
领取专属 10元无门槛券
手把手带您无忧上云