mybatis select in 映射解决连表问题

文章介绍了通过主键索引进行高效查询的方法,适用于不作为搜索条件的关联字段。在MyBatis中,可以通过设置includeIds并使用foreach进行in查询。在业务处理时,注意对主键ID列表进行去重和空判断,然后将查询结果转换为Map以方便后续处理。这种方法具有高性能和代码复用的优点,但不适用于搜索条件拼接。
摘要由CSDN通过智能技术生成

提示:对于一张表需要关联查出另一张表的一个字段,且不作为搜索条件,可以使用此方案,会走主键索引,性能极高,再通过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(",")));
                            });
        });
    }

总结

优点:性能极高,方法可同用

缺点:不可作为搜索条件拼接,代码量增加

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值