Mybatis plus join 一对多语法

news2024/10/5 17:16:04

一对多案例(set集合)

1. 实体类

题目

package co.yixiang.exam.entity;

import co.yixiang.domain.BaseDomain;
import co.yixiang.exam.config.CustomStringListDeserializer;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.util.List;

/***
 * 题库表
 */

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class ExQuestion extends BaseDomain {

    @JsonCreator
    public ExQuestion(String someValue) {
        // 初始化代码
    }

    // 主键
    private Integer id;
    // 题目序号
    private Integer questionNum;
    // 父题目id
    private Integer pid;
    // 考试题目
    private String questionTitle;
    // 考试子题目
    private String questionTitleZi;
    // 正确答案
    private String optionsCorrect;
    // 分数
    private Integer questionScore;
    // 答案解析
    private String questionAnswer;
    // 分类科目:初级会计,经济基础
    private String questionSubject;
    // 考题类型:1.单选题,2.多选题,3.判断题,4.不定项选择题
    private String questionType;
    // 创建人
    private String createBy;
    // 修改人
    private String updateBy;

      // 前端校验
    @TableField(exist = false)
    private boolean launch = false;

    // 选项表内容id 集合
    @TableField(exist = false)
    private List<Integer> ids;

    //子选项内容
    @TableField(exist = false)
    private List<ExOptions> exOptions;

    @TableField(exist = false)
    private List<ExQuestion> exQuestionDtoList; // 子菜单列表


    @TableField(exist = false)
    private List<String> answerList;


    @TableField(exist = false)
    private List<Integer> questionIds;
}

选项


@Data
@AllArgsConstructor
@NoArgsConstructor
public class ExOptions extends BaseDomain {
    // 题目选项ID(自增)
    private Integer id;
    // 题库序号
    private Integer optionsNum;
    // exam_question考题表的ID
    private Integer questionId;
    // 选项内容
    private String optionsContent;
    // 创建人
    private String createBy;
    // 修改人
    private String updateBy;



    @TableField(exist = false)
    private String option;
}

vo返回类

@Data
public class QuestionOptionsTestVo {
    private Integer id;
    // 考试题目
    private String questionTitle;

    // 考试子题目
    private String questionTitleZi;

    //子选项内容
    @TableField(exist = false)
    private List<ExOptions> exOptions;
}

2.语法案例(一对多)

    public List<QuestionOptionsTestVo> getQuestionOptions() {
        MPJLambdaWrapper<ExQuestion> wrapper = new MPJLambdaWrapper<>();
        // 主表指定查询id和题目
        wrapper.select(ExQuestion::getId)
                .select(ExQuestion::getQuestionTitle)
                .select(ExQuestion::getQuestionTitleZi)
                //   左连接选项
                .leftJoin(ExOptions.class, ExOptions::getQuestionId, ExQuestion::getId)
                // 选项放进exOptions集合
                .selectCollection(ExOptions.class, ExQuestion::getExOptions);

        List<QuestionOptionsTestVo> questionOptionsTestVos = exQuestionMapper.selectJoinList(QuestionOptionsTestVo.class, wrapper);
        return questionOptionsTestVos;
    }

 

一对多对多(嵌套list集合)

试卷------>题目------>选项

    public R getQuestionOptionsAll() {
        MPJLambdaWrapper<ExPaper> wrapper = new MPJLambdaWrapper<>();

        wrapper.select(ExPaper::getId)
                .select(ExPaper::getPaperName)
                //   试卷 & 试卷_题目
                .leftJoin(ExPaperQuestion.class, ExPaperQuestion::getPaperId, ExPaper::getId, p -> p
                        .select(ExPaperQuestion::getQuestionId))
                // 试卷_题目  & 题目 表
                .leftJoin(ExQuestion.class, ExQuestion::getId, ExPaperQuestion::getQuestionId, q -> q
                        .select(ExQuestion::getId
                                ,ExQuestion::getQuestionTitle
                                ,ExQuestion::getQuestionAnswer
                                ,ExQuestion::getOptionsCorrect
                                ,ExQuestion::getQuestionScore))
                // 题目 & 选项
                .leftJoin(ExOptions.class, ExOptions::getQuestionId, ExQuestion::getId, o -> o
                        .select(ExOptions::getId,
                                ExOptions::getOptionsContent))
                // 将题目放进试卷对象子集里,将选项放进题目对象子集中
                .selectCollection(ExQuestion.class, ExPaperVoA::getQuestions, b -> b
                        .collection(ExOptions.class, ExQuestionVO::getExOptions));


        List<ExPaperVoA> exPaperVoAS = exPaperMapper.selectJoinList(ExPaperVoA.class, wrapper);

        return R.success(exPaperVoAS);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1830426.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

youlai-boot项目的学习—本地数据库安装与配置

数据库脚本 在项目代码的路径下&#xff0c;有两个版本的mysql数据库脚本&#xff0c;使用对应的脚本就安装对应的数据库版本&#xff0c;本文件选择了5 数据库安装 这里在iterm2下使用homebrew安装mysql5 brew install mysql5.7注&#xff1a;记得配置端终下的科学上网&a…

PHP7 数组的实现

前提 PHP版本&#xff1a;php7.0.29使用到的文件 php-src/Zend/zend_types.hphp-src/Zend/zend_hash.hphp-src/Zend/zend_hash.cphp-src/Zend/zend_string.h 本文 是《PHP7底层设计和源码实现》第5章 数组的实现&#xff0c;学习笔记 功能分析 整体结构 bucket 里面增加h字段…

android studio CreateProcess error=2, 系统找不到指定的文件

【问题记录篇】 在AndroidStudio编译开发jni相关工程代码的时候&#xff0c;编译遇到的这个报错&#xff1a; CreateProcess error2, 系统找不到指定的文件。排查处理步骤: 先查看Build Output的具体日志输出 2.了解到问题出在了NDK配置上&#xff0c;此时需要根据自己的gra…

RTOS实时操作系统

常见的RTOS有&#xff1a; VxWorks&#xff1a;广泛应用于工业、医疗、通信和航空航天领域。FreeRTOS&#xff1a;一个开源的RTOS&#xff0c;广泛用于嵌入式设备。uc/OS&#xff1a;一个适用于教育和小型商业项目的RTOS。QNX&#xff1a;主要应用于汽车和工业自动化领域。Win…

第 2 章:Spring Framework 中的 IoC 容器

控制反转&#xff08;Inversion of Control&#xff0c;IoC&#xff09;与 面向切面编程&#xff08;Aspect Oriented Programming&#xff0c;AOP&#xff09;是 Spring Framework 中最重要的两个概念&#xff0c;本章会着重介绍前者&#xff0c;内容包括 IoC 容器以及容器中 …

Android-茫茫9个月求职路,终于拿满意offer

线程和进程的区别&#xff1f;为什么要有线程&#xff0c;而不是仅仅用进程&#xff1f;算法判断单链表成环与否&#xff1f;如何实现线程同步&#xff1f;hashmap数据结构&#xff1f;arraylist 与 linkedlist 异同&#xff1f;object类的equal 和hashcode 方法重写&#xff0…

免费分享:2017-2021全球10m土地利用数据(esri)(附下载方法)

美国环境系统研究所公司&#xff08;Environmental Systems Research Institute, Inc. 简称ESRI公司&#xff09;&#xff0c;以其先进的ArcGIS解决方案&#xff0c;为全球各行业提供多层次、可扩展、功能强大且开放性强的GIS技术。哨兵2号&#xff08;Sentinel-2&#xff09;是…

国产MCU芯片(2):东软MCU概览及触控MCU

前言: 国产芯片替代的一个主战场之一就是mcu,可以说很多国内芯片设计公司都打算或者已经在设计甚至有了一款或多款的量产产品了,这也是国际大背景决定的。过去的家电市场、过去的汽车电子市场,的确国产芯片的身影不是很常见,如今不同了,很多fabless投身这个行业,一种是…

【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)

&#x1f525;引言 本篇将深入解析单链表:探索底层逻辑&#xff0c;理解底层是如何实现并了解该接口实现的优缺点&#xff0c;以便于我们在编写程序灵活地使用该数据结构。 &#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &…

3. ceph-mimic版本部署

ceph-mimic版本部署 一、ceph-mimic版本部署1、环境规划2、系统基础环境准备2.1 关闭防火墙、SELinux2.2 确保所有主机时间同步2.3 所有主机ssh免密2.4 添加所有主机解析 3、配置ceph软件仓库4、安装ceph-deploy工具5、ceph集群初始化6、所有ceph集群节点安装相关软件7、客户端…

【C++】多态|原理|override|final|抽象类|多继承虚函数表|对象模型|虚表打印|(万字详解版)

目录 ​编辑 一.多态的概念 二.多态的构建 虚函数 重写 虚函数重写的例外 协变 隐藏 析构函数的重写 三.重载、重写(覆盖)、隐藏(重定义)的对比 四.C11新增的 override 和 final override final 五.抽象类 六.多态的原理 虚函数表 总结&#xff1a; 引用…

CMake多行注释以及通过Message打印不同级别日志

1 CMake注释 1.1 单行注释 CMake中单行注释时以 # 开头。 # 指定CMake最低版本cmake_minimum_required(VERSION 3.20)# 这是注释project(myproject)1.2 多行注释 多行注释时&#xff0c;以 #[[ 开头&#xff0c;以 ]] 结尾&#xff0c;中间都可以写注释内容。3.0之前的版本…

MySQL面试重点-1

1. 数据库基础知识&#xff1a; DDL、DML、DQL、DCL的概念与区别&#xff1f; DDL&#xff08;数据定义语言&#xff09;&#xff1a;创建&#xff08;CREATE&#xff09;数据库中的各种对象&#xff1a;表、视图、索引等DML&#xff08;数据操纵语言&#xff09;&#xff1a…

点积和叉积

文章目录 1、向量的点积2、向量的叉积3、矩阵的点积4、矩阵的叉积 1、向量的点积 数量积又称标量积&#xff08;Scalar product&#xff09;、点积&#xff08;Dot product&#xff09;&#xff0c;在欧几里得空间&#xff08;Euclidean space&#xff09;中称为内积&#xff…

为何云原生是未来?企业IT架构的颠覆与重构(上)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是云原生 2、云原生的背景和起源 背景 起源 关…

酷开会员丨酷开系统K歌模式,父亲节的家庭欢聚时光

K歌以其独特的魅力&#xff0c;为家庭娱乐带来了无限乐趣。想象一下&#xff0c;父亲节这天&#xff0c;打开电视进入K歌频道&#xff0c;与家人一起嗨唱&#xff0c;客厅里充满了欢声笑语&#xff0c;酷开系统的K歌应用也就成为了连接亲情的桥梁&#xff0c;让爸爸们都能在这个…

CSS-0_1 CSS和层叠(样式优先级、内联样式、选择器 用户代理样式)

CSS 的本质就是声明规则 ——《深入解析CSS》 文章目录 CSS层叠和优先级用户代理样式请和用户代理样式和谐相处 选择器单选择器的优先级选择器组的优先级关于选择器的其他源码顺序尽可能的选择优先级低的选择器 内联样式内联样式和JavaScript !important多个 !important 碎碎念…

Wing FTP Server v7.2.0 解锁版安装教程 (跨平台的专业FTP服务器软件)

前言 Wing FTP Server是一款跨平台的专业FTP服务器软件, 支持可扩展处理器架构采用异步IO处理, 在速度和效率方面领先于其他同类产品. 它在高负载的情况下也能持续地正常运行, 非常适合企业文件传输. 通过基于Web管理端, 何时何地都能轻松管理远程的服务器. 除了基本功能外, 它…

qt笔记之qml和C++的交互系列(二):rootObject

qt笔记之qml和C的交互系列(二)&#xff1a;rootObject code review! —— 2024-06-17 杭州 夜 文章目录 qt笔记之qml和C的交互系列(二)&#xff1a;rootObject一.使用rootObject例程1.运行2.main.cpp3.main.qml3.用于Debug的加长版main.cpp 二.QML文件的根对象详解基本概念常…

蜂鸣器:基础(1)

蜂鸣器&#xff1a;基础&#xff08;1&#xff09; 原文&#xff1a; In this tutorial, we are going to learn how to use the buzzer with Arduino, In detail, we will learn: 在本教程中&#xff0c;我们将学习如何将蜂鸣器与Arduino一起使用&#xff0c;将学习&#xff…