Mybatis ORM / ResultMap

merci·2023년 3월 23일
0

Rest Api 프로젝트

목록 보기
2/6

Mybatis의 ORM을 이용하기 위해서 ResultMap을 이용했는데 처음 하는거라서 많은 오류를 접하고 몇가지를 정리한다.

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>	
profile
작은것부터

0개의 댓글