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);
    }
相关推荐
Amd7945 分钟前
深入探讨存储过程的创建与应用:提高数据库管理效率的关键工具
sql·性能优化·数据安全·存储过程·数据库管理·业务逻辑·创建存储过程
工业互联网专业9 分钟前
基于springboot+vue的高校社团管理系统的设计与实现
java·vue.js·spring boot·毕业设计·源码·课程设计
九圣残炎11 分钟前
【ElasticSearch】 Java API Client 7.17文档
java·elasticsearch·搜索引擎
m0_748251521 小时前
Ubuntu介绍、与centos的区别、基于VMware安装Ubuntu Server 22.04、配置远程连接、安装jdk+Tomcat
java·ubuntu·centos
Bro_cat1 小时前
深入浅出JSON:数据交换的轻量级解决方案
java·ajax·java-ee·json
等一场春雨1 小时前
Java设计模式 五 建造者模式 (Builder Pattern)
java·设计模式·建造者模式
hunzi_12 小时前
Java和PHP开发的商城系统区别
java·php
V+zmm101342 小时前
教育培训微信小程序ssm+论文源码调试讲解
java·数据库·微信小程序·小程序·毕业设计
十二同学啊2 小时前
Spring Boot 中的 InitializingBean:Bean 初始化背后的故事
java·spring boot·后端
我劝告了风*2 小时前
NIO | 什么是Java中的NIO —— 结合业务场景理解 NIO (二)
java·nio