resultMap的一對多聯合查詢

前言

最近做一個問卷系統的項目,問卷系統包含了三部分,問卷、問題、問題選項,然後呢爲了給前端數據,就要把這部分數據一起查出來,所以爲了解決這個問題呢,就想到了使用resultMap但是沒做過resultMap中嵌套resultMap的,所以呢就度娘一通,解決了這個問題,但是自己也要記錄下來,好記性不如爛筆頭!!!

表結構如下:

一個survey跟question是一對多,

question與options是一對多

所以通過resultMap來將survey與question對應,同時question與options對應。
通過Mybatis實現代碼如下:

<select id="selectSurvey" resultMap="SurveyMap">
    select a.id,a.title,q.qid,q.question_title,os.oid,os.text
    from survey a
    left join survey_question b on b.survey_id=a.id
    left join question q on q.qid=b.question_id
    left join question_options qo on qo.question_id=q.qid
    left join options os on os.oid=qo.options_id
    where a.id=#{id}
</select>

<resultMap type="com.tencent.survey.system.entity.Survey" id="SurveyMap">
    <id column="id" jdbcType="INTEGER" property="id" />
    <result column="title" jdbcType="VARCHAR" property="title" />
    //第一層聯合查詢
    <collection property="questionList" ofType="com.tencent.survey.system.entity.Question" javaType="java.util.List">
        <result column="qid" property="id"/>
        <result column="question_name" jdbcType="VARCHAR" property="questionName" />
        //第二層聯合查詢
        <collection property="optionsList" ofType="com.tencent.survey.system.entity.Options" javaType="java.util.List">
            <result column="oid" property="id"/>
            <result column="text" jdbcType="VARCHAR" property="text"/>
        </collection>
    </collection>
</resultMap>

實體類中,需要在Survey類中實現

@Data
public class Survey {
    private Long id;
    private String title;
    public List<Question> questionList;
}

@Data
public class Question {
    private Long id;
    private String questionName;
    public List<Options> optionsList;
}

@Data
public class Options {
    private Long id;
    private String text;
}

換電腦了,不能展示結果集了!!!(蛋疼!)

最後查詢出來的結果就是Survey對象包含List<Question>,List<Question>中包含List<Options>

我是膜拜大佬的程序員,今天膜拜二哥!!
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章