实体结构
现有三个实体需要层层嵌套,即一个A包含多个B,一个B包含多个C。
在这个例子里就是一个问卷包含多个问题,一个问题又包含多个选项。一对多关系
- 实体Questionnaire
public class Questionnaire extends BaseEntity {
/** 问卷id */
private Long id;
/** 问卷标题 */
private String title;
/** 问卷状态 */
private String status;
/** 问卷关联问题 */
private List<Question> questionList;
}
- 实体Question 关联Questionnaire的id
public class Question extends BaseEntity {
/** 问题id */
private Long id;
/** 关联问卷id */
@Excel(name = "关联问卷id" )
private Long questionnaireId;
/** 问题内容 */
@Excel(name = "问题内容" )
private String questionContent;
/** 问卷问题关联选项list */
private List<QuestionItem> questionItemList;
}
- 实体QuestionItem 关联Question 的id
public class QuestionItem extends BaseEntity {
/** 题目id */
private Long id;
/** 问题id */
private Long questionId;
/** 选项内容 */
private String itemContext;
}
xml中实现
<resultMap type="Questionnaire" id="QuestionnaireResult">
<result property="id" column="id"/>
<result property="title" column="title"/>
<result property="description" column="description"/>
<result property="startTime" column="start_time"/>
<result property="endTime" column="end_time"/>
<result property="status" column="status"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="delFlag" column="del_flag"/>
<result property="remark" column="remark"/>
<collection property="questionList" javaType="ArrayList" ofType="Question" column="id" select="selectQuestionByQuestionnaireId"/>
</resultMap>
<resultMap id="QuestionResult" type="Question">
<result property="id" column="id"/>
<result property="questionnaireId" column="questionnaire_id"/>
<result property="questionContent" column="question_content"/>
<result property="problemType" column="problem_type"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="delFlag" column="del_flag"/>
<result property="remark" column="remark"/>
<collection property="questionItemList" javaType="ArrayList" ofType="QuestionItem" column="id" select="selectQuestionItemByQuestionId"/>
</resultMap>
<resultMap id="QuestionItemResult" type="QuestionItem">
<result property="id" column="id"/>
<result property="questionId" column="question_id"/>
<result property="itemContext" column="item_context"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="delFlag" column="del_flag"/>
<result property="remark" column="remark"/>
</resultMap>
<select id="selectQuestionnaireById" parameterType="Long" resultMap="QuestionnaireResult">
<include refid="selectQuestionnaireVo"/>
where id = #{id}
and del_flag = #{delFlag}
</select>
<select id="selectQuestionByQuestionnaireId" resultMap="QuestionResult">
select * from buss_question where questionnaire_id = #{id}
</select>
<select id="selectQuestionItemByQuestionId" resultMap="QuestionItemResult">
select * from buss_question_item where question_id = #{id}
</select>
其中collection 中
- property 对应实体中的属性
- javaType 属性的类型,可以写成List,或者不写这个属性
- ofType 映射到集合中的实体类名
- column 传参参数
- select 关联查询语句
感谢 https://blog.youkuaiyun.com/chen_nianqing/article/details/106235069