JAVA开发常见一对多,一对一表关系;代码处理
·
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>
更多推荐




所有评论(0)