Mybatis의 ORM을 이용하기 위해서 ResultMap을 이용했는데 처음 하는거라서 많은 오류를 접하고 몇가지를 정리한다.
<collection> 태그는 특정 컬럼에서 조회한 결과를 해당 컬렉션에 매핑할 때 사용하고,
<association> 태그는 특정 컬럼에서 조회한 결과를 해당 객체에 매핑할 때 사용한다
<collection>은 <association>보다 순서가 먼저 있으면 안된다.
<collection> 내부에 <association>을 넣을 수도 없다.
<collection> 내부에 <association>을 넣고 싶다면 <resultmap>으로 분리 시키고 작성해야 한다.
<collection> 태그 안에서 <association> 태그를 사용할 때에는 <select> 속성 사용할 수 없음
resultmap으로 매핑하는 필드가 List<클래스> 라면
<collection property="applyDto" resultMap="applyDtoResultMap"/> 을 사용해야함
다른 테이블의 정보를 가져올때 List데이터를 가져온다면
<collection property="skillList" column="jobs_id" select="findByJobsSkill"/> 처럼만들고 서브쿼리처럼 이용한다.
<select id="findByJobsSkill" resultType="java.lang.String">으로 List<클래스> 를 정의한다.
아래는 그냥 만든거 하나 추가함
위 규칙을 지켜서 만들어야 한다
<resultMap id="applyAndSuggestDto" type="shop.mtcoding.project.dto.comp.CompResp$CompApplyOutDto">
<id property="compId" column="comp_id"/>
<collection property="applyDto" resultMap="applyDtoResultMap"/>
<collection property="suggestDto" resultMap="suggestDtoResultMap"/>
</resultMap>
<resultMap id="applyDtoResultMap" type="shop.mtcoding.project.dto.comp.CompResp$CompApplyOutDto$ApplyDto">
<id property="applyId" column="apply_id"/>
<result property="state" column="state"/>
<association property="resumeDto" javaType="shop.mtcoding.project.dto.comp.CompResp$CompApplyOutDto$ApplyDto$ResumeDto">
<id property="resumeId" column="resume_id"/>
<result property="title" column="title"/>
<association property="userDto" javaType="shop.mtcoding.project.dto.comp.CompResp$CompApplyOutDto$ApplyDto$ResumeDto$UserDto">
<id property="userId" column="user_id"/>
<result property="name" column="name"/>
</association>
</association>
<association property="jobsDto" javaType="shop.mtcoding.project.dto.comp.CompResp$CompApplyOutDto$ApplyDto$JobsDto">
<id property="jobsId" column="jobs_id"/>
<result property="title" column="title"/>
<result property="career" column="career"/>
<result property="education" column="education"/>
<result property="position" column="position"/>
</association>
</resultMap>
<resultMap id="suggestDtoResultMap" type="shop.mtcoding.project.dto.comp.CompResp$CompApplyOutDto$SuggestDto">
<id property="suggestId" column="suggest_id"/>
<result property="state" column="state"/>
<association property="jobsDto" javaType="shop.mtcoding.project.dto.comp.CompResp$CompApplyOutDto$SuggestDto$JobsDto">
<id property="jobsId" column="jobs_id"/>
<result property="title" column="title"/>
<result property="position" column="position"/>
</association>
<association property="resumeDto" javaType="shop.mtcoding.project.dto.comp.CompResp$CompApplyOutDto$SuggestDto$ResumeDto">
<id property="resumeId" column="resume_id"/>
<result property="title" column="title"/>
<association property="userDto" javaType="shop.mtcoding.project.dto.comp.CompResp$CompApplyOutDto$SuggestDto$ResumeDto$UserDto">
<id property="userId" column="user_id"/>
<result property="name" column="name"/>
</association>
</association>
</resultMap>
<select id="findApplyAndSuggestByCompId" resultMap="applyAndSuggestDto">
select * from apply_tb a join jobs_tb j
on a.jobs_id = j.jobs_id join resume_tb r
on a.resume_id = r.resume_id join user_tb u
on u.user_id = r.user_id join suggest_tb s
on s.jobs_id = j.jobs_id
where j.comp_id = #{compId}
</select>