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);
    }
相关推荐
Leo July11 小时前
【Java】Spring Security 6.x 全解析:从基础认证到企业级权限架构
java·spring·架构
星火开发设计11 小时前
C++ 数组:一维数组的定义、遍历与常见操作
java·开发语言·数据结构·c++·学习·数组·知识
码道功成11 小时前
Pycham及IntelliJ Idea常用插件
java·ide·intellij-idea
消失的旧时光-194312 小时前
第四篇(实战): 订单表索引设计实战:从慢 SQL 到毫秒级
java·数据库·sql
それども12 小时前
@ModelAttribute vs @RequestBody
java
雨中飘荡的记忆13 小时前
深度详解Spring Context
java·spring
Tao____13 小时前
JAVA开源物联网平台
java·物联网·mqtt·开源·ruoyi
yqd66613 小时前
SpringSecurity的使用
java·spring
仙俊红13 小时前
Java Map 家族核心解析
java·开发语言
一嘴一个橘子14 小时前
springMvc 接收参数、cookie、header
java