Mybatis plus join 一对多语法

一对多案例(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);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值