1: 一对多处理

eg:A表与B表是一对多关系;在获取A列表的同时;要把每个A的B集合获取;

这里博主不建议在sql进行关联查询;效率只会越来越慢;

那么如何获取呢

通过代码进行分组处理

List<BaseConstraintRecord> list= baseConstraintRecordMapper.selectBaseConstraintRecordList(baseConstraintRecord);
//TODO 获取关联的Id集合
List<Long> idList= list.stream().map(BaseConstraintRecord::getRecordId).collect(Collectors.toList());


if (!idList.isEmpty()){

      TODO in方式查询
    BaseRecordFile fileQuery =new BaseRecordFile();
    fileQuery.setAttachmentType(String.valueOf(2));
    Map<String,Object> param=new HashMap<>();
    param.put("recordIdList",idList);
    fileQuery.setParams(param);
    List<BaseRecordFile>  fileList=   baseRecordFileMapper.selectBaseRecordFileList(fileQuery);
  
   //TODO 分组处理
  Map<Long,List<BaseRecordFile>> fileMap= fileList.stream().collect(Collectors.groupingBy(BaseRecordFile::getRecordId));

    for (BaseConstraintRecord item:list){
        if (fileMap.containsKey(item.getRecordId())){
            List<String> fileUrlList = fileMap.get(item.getRecordId()).stream().map(BaseRecordFile::getAttachmentUrl).filter(Objects::nonNull).collect(Collectors.toList());  // 过滤null值.collect(Collectors.toList());
            item.setRecordFileList(fileUrlList);
        }
    }
}

            <if test="params.recordIdList!=null and params.recordIdList.size()>0">
                and record_id in
                <foreach item="recordId" collection="params.recordIdList" open="(" separator="," close=")">
                    #{recordId}
                </foreach>
            </if>

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐