前言
最近做一個問卷系統的項目,問卷系統包含了三部分,問卷、問題、問題選項,然後呢爲了給前端數據,就要把這部分數據一起查出來,所以爲了解決這個問題呢,就想到了使用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>
。
我是膜拜大佬的程序員,今天膜拜二哥!!