提示:对于一张表需要关联查出另一张表的一个字段,且不作为搜索条件,可以使用此方案,会走主键索引,性能极高,再通过kv映射保证唯一性。
目录
一、通过主键索引查询
1:可以在实体类设定includeIds,mybatis通过foreach进行in查询
2:此为service通用方法,建议放在service包下comon包下
实体类 对象= new 实体类();
对象.setIncludeIds(主键ids);
List<实体类> list= service.selectList(对象);
二、对自己的业务进行处理
1:要注意,如果传进来的主键ids为空,直接退出,不为空要进行去重
2:list判空,用CollectionUtil
3:对通用方法转换为map
4:通过get(key),获得对应的值,如果为list,可再对此list进行流式处理获取想要得到的数据
private void initCheckVoListSensorNos(List<CheckVo> checkVos){
List<String> instrumentIds= checkVos.stream()
.filter(item->ObjectUtils.isNotEmpty(item.getInstrumentId()))
.map(CheckVo::getInstrumentId).collect(Collectors.toList());
if(CollectionUtil.isEmpty(instrumentIds)){
return;
}
instrumentIds = instrumentIds.stream().distinct().collect(Collectors.toList());
Map<String, List<CompleteInstrumentSensorVo>> instrumentMaps = ProduceSensorVoService.initVoListSensorNos(instrumentIds);
checkVos.forEach(item->{
List<CompleteInstrumentSensorVo> selectList = instrumentMaps.get(item.getInstrumentId());
Optional.ofNullable(selectList)
.ifPresent(list->{
item.setSensorNos(list.stream()
.map(CompleteInstrumentSensorVo::getSensorNo)
.collect(Collectors.joining(",")));
});
});
}
总结
优点:性能极高,方法可同用
缺点:不可作为搜索条件拼接,代码量增加