Java Mybatis plus 语法中 避免sql循环

1. 查出全部数据并进行数据筛选过滤

在一对多的情况时,我们想把多的对象集合set进一的里面,需要避免循环sql

java 复制代码
    @Override
    public R<List<ExRecord>> getExRecordAll(ExRecord exRecord) {

        // 获取用户id
        Integer userId = Math.toIntExact(SecurityUtils.getUserId());



        List<ExRecord> exRecords = exRecordMapper.selectList(new LambdaQueryWrapper<ExRecord>()
                // 根据用户id
                .eq(Objects.nonNull(userId), ExRecord::getUserId, userId)
                // 根据 试卷类型
                .eq(Objects.nonNull(exRecord.getPaperType()), ExRecord::getPaperType, exRecord.getPaperType())
        );

          // 过滤出全部id
        List<Integer> recordIds = exRecords.stream().map(ExRecord::getId).collect(Collectors.toList());

        // 过滤答题卡表中的id,并stream流进行分组
        Map<Integer, List<ExSheetAnswer>> collect = examSheetAnswerMapper.selectList(Wrappers.<ExSheetAnswer>lambdaQuery()
                .in(ExSheetAnswer::getRecordId, recordIds)).stream().collect(Collectors.groupingBy(ExSheetAnswer::getRecordId));

        // 根据map id 去赋值
        exRecords.forEach(record -> {
            record.setSheetAnswers(collect.getOrDefault(record.getId(), Collections.emptyList()));
        });


        return R.success(exRecords);
    }
相关推荐
lihao lihao11 分钟前
模板进阶
java·数据结构·算法
山风wind18 分钟前
Spring中责任链模式的工业级应用简单剖析
java·spring·责任链模式
星空寻流年20 分钟前
c3p0连接池isClosed()异常事故分析:MyBatis版本兼容问题排查与解决
mybatis
Element_南笙31 分钟前
BUG:ModuleNotFoundError: No module named ‘milvus_lite‘
java·服务器·数据库
yyy(十一月限定版)37 分钟前
C++基础
java·开发语言·c++
Coder_Boy_38 分钟前
分布式系统设计经验总结:金融vs电商的核心差异与决策思路
java·运维·微服务·金融·电商
To Be Clean Coder1 小时前
【Spring源码】getBean源码实战(一)
java·后端·spring
派大鑫wink1 小时前
【Day21】NIO入门:通道、缓冲区与非阻塞IO基础
java·开发语言
ziyue75751 小时前
idea将配置移动到自定义位置
java·intellij-idea·idea·软件
南汐以墨1 小时前
UI自动化测试指南(一):浅解概念
java·测试工具