복잡한 Join문 mybatis 예시

itbuddy·2024년 8월 27일

Spring & Java

목록 보기
8/8

신입때 나중에 필요하면 다시 보려고 evernote에 정리해둔 복잡한 join 쿼리입니다. 혹시나 mybatis를 사용하는 초보분들에게 좋은 자료가 되었으면 좋겠습니다.

	<resultMap id="SurveyVo" type="com.example.survey.database.survey.dto.SurveyVo">
		<id property="surveyKey"	column="survey_key"	jdbcType="BIGINT"	javaType="java.lang.Long"/>
		<result property="surveyTitle"	column="survey_title"	jdbcType="VARCHAR"	javaType="java.lang.String"/>
		<result property="surveyDesc"	column="survey_desc"	jdbcType="VARCHAR"	javaType="java.lang.String"/>
		<result property="surveyType"	column="survey_type"	jdbcType="VARCHAR"	javaType="java.lang.String"/>
		<result property="surveyStatus"	column="survey_status"	jdbcType="VARCHAR"	javaType="java.lang.String"/>
		<result property="startDt"	column="start_dt"	jdbcType="TIMESTAMP"	javaType="java.sql.Timestamp"/>
		<result property="endDt"	column="end_dt"	jdbcType="TIMESTAMP"	javaType="java.sql.Timestamp"/>
		<result property="visibleYn"	column="visible_yn"	jdbcType="VARCHAR"	javaType="java.lang.String"/>
		<result property="regDt"	column="reg_dt"	jdbcType="TIMESTAMP"	javaType="java.sql.Timestamp"/>
		<result property="modDt"	column="mod_dt"	jdbcType="TIMESTAMP"	javaType="java.sql.Timestamp"/>
		<result property="adminKey"	column="admin_key"	jdbcType="BIGINT"	javaType="java.lang.Long"/>
		<result property="adminName"	column="admin_name"	jdbcType="VARCHAR"	javaType="java.lang.String"/>
		<result property="cursor"	column="custom_cursor"	jdbcType="VARCHAR"	javaType="java.lang.String"/>
		<collection property="surveyQuestionVos"	columnPrefix="sq1_"	resultMap="com.example.survey.database.survey.mappers.SurveyQuestionMapper.SurveyQuestionVo"/>
		<collection property="surveyReportVos"	columnPrefix="sr1_"	resultMap="com.example.survey.database.survey.mappers.SurveyReportMapper.SurveyReportVo"/>
	</resultMap>

	<sql id="surveyColumns">
		${alias}.survey_key ${prefix}survey_key,
		${alias}.survey_title ${prefix}survey_title,
		${alias}.survey_desc ${prefix}survey_desc,
		${alias}.survey_type ${prefix}survey_type,
		${alias}.survey_status ${prefix}survey_status,
		${alias}.start_dt ${prefix}start_dt,
		${alias}.end_dt ${prefix}end_dt,
		${alias}.visible_yn ${prefix}visible_yn,
		${alias}.reg_dt ${prefix}reg_dt,
		${alias}.mod_dt ${prefix}mod_dt,
		${alias}.admin_key ${prefix}admin_key,
		${alias}.admin_name ${prefix}admin_name
	</sql>
    
    
    <select  id="selectSurveyBySearchMapWithSqNSqaNSrNSrs" resultMap="SurveyVo">
        SELECT 
            t1.*,
            <include refid="com.example.survey.database.survey.mappers.SurveyQuestionMapper.surveyQuestionColumns"><property name="alias" value="sq1"/><property name="prefix" value="sq1_"/></include>,
            <include refid="com.example.survey.database.survey.mappers.SurveyQuestionAnswerMapper.surveyQuestionAnswerColumns"><property name="alias" value="sqa1"/><property name="prefix" value="sq1_sqa1_"/></include>,
            <include refid="com.example.survey.database.survey.mappers.SurveyReportSheetMapper.surveyReportSheetColumns"><property name="alias" value="srs1"/><property name="prefix" value="sq1_sqa1_srs1_"/></include>,
            <include refid="com.example.survey.database.survey.mappers.SurveyReportMapper.surveyReportColumns"><property name="alias" value="sr1"/><property name="prefix" value="sr1_"/></include>,
            <include refid="com.example.survey.database.survey.mappers.SurveyReportSheetMapper.surveyReportSheetColumns"><property name="alias" value="srs1"/><property name="prefix" value="sr1_srs1_"/></include>
        FROM(
            SELECT
                <include refid="surveyColumns"><property name="alias" value="s1"/><property name="prefix" value=""/></include>
            FROM 
                tb_survey s1
            WHERE
                1=1                 
                AND s1.survey_key = #{surveyKey}
            ) t1
        LEFT JOIN tb_survey_question sq1 ON t1.survey_key = sq1.survey_key
        LEFT JOIN tb_survey_question_answer sqa1 ON sq1.question_key = sqa1.question_key
        LEFT JOIN tb_survey_report_sheet srs1 ON sqa1.answer_key = srs1.answer_key
        LEFT JOIN tb_survey_report sr1 ON srs1.report_key = sr1.report_key
    </select>

profile
프론트도 조금 아는 짱구 같은 서버 프로그래머

0개의 댓글