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);
    }
相关推荐
知其然亦知其所以然4 分钟前
JVM社招面试题:队列和栈是什么?有什么区别?我在面试现场讲了个故事…
java·后端·面试
harmful_sheep11 分钟前
Spring 为何需要三级缓存解决循环依赖,而不是二级缓存
java·spring·缓存
星辰大海的精灵13 分钟前
如何确保全球数据管道中的跨时区数据完整性和一致性
java·后端·架构
大大。16 分钟前
van-tabbar-item选中active数据变了,图标没变
java·服务器·前端
nc_kai18 分钟前
Flutter 之 每日翻译 PreferredSizeWidget
java·前端·flutter
Codebee28 分钟前
OneCode:AI时代的先锋——注解驱动技术引领开发范式变革
java
勤奋的知更鸟29 分钟前
Java 编程之状态模式
java·开发语言·状态模式
Lx35237 分钟前
MySQL物化视图:预计算查询结果的定期刷新
sql·mysql·性能优化
Lx35238 分钟前
Mysql死锁日志分析:事务逻辑冲突的排查技巧
sql·mysql·性能优化
架构个驾驾39 分钟前
深入浅出MyBatis-Plus实战指南
java