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);
    }
相关推荐
jjjxxxhhh1238 分钟前
【加密】-AES与对称加密
java·服务器·网络
临水逸9 分钟前
飞牛fnos 2025 漏洞Java跨域URL浏览器
java·开发语言·安全·web安全
yaoxin52112311 分钟前
324. Java Stream API - 实现 Collector 接口:自定义你的流式收集器
java·windows·python
H Corey12 分钟前
数据结构与算法:高效编程的核心
java·开发语言·数据结构·算法
米羊12122 分钟前
Struts 2 漏洞(上)
java·后端·struts
galaxyffang1 小时前
Java堆内存诊断:从工具使用到实战分析
java·jvm
e***13621 小时前
MySQL 常用 SQL 语句大全
数据库·sql·mysql
HAPPY酷2 小时前
C++ 成员指针(Pointer to Member)完全指南
java·c++·算法
Sunsets_Red2 小时前
浅谈随机化与模拟退火
java·c语言·c++·python·算法·c#·信息学竞赛
星火开发设计2 小时前
模板参数:类型参数与非类型参数的区别
java·开发语言·前端·数据库·c++·算法