Mybatis框架对于处理一对多的情况有两种方法
这两种方法各有问题:
建议开发自己去拼装一对多的集合
处理的办法是:
把主表的关联字段手动放进一个集合, 发起in查询把关联表的数据查询出来, 然后手动拼装, 这样发起的查询数量就是1+1
常见做法就是lambda将实体集合转为id集合, 发起in查询, 再用lambda分组, 最后进行对应
如:
Page<OrderInfoDTO> page = orderMapper.selectPage();
List<String> collect = page.getRecords().stream().map(OrderInfoDTO::getFileBatchCode)
.collect(Collectors.toList());
if (ObjectUtil.isNotEmpty(collect)) {
Map<String, List<FilePO>> map = fileMapper.selectList(new QueryWrapper<FilePO>()
.in("code", collect))
.stream().collect(Collectors.groupingBy(FilePO::getBatchCode));
page.getRecords().forEach(item -> item.setFileList(map.get(item.getFileBatchCode())));
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。