[디버그] myBatis resultMap 사용시 주의사항

2024. 5. 18. 09:53디버그

<resultMap type="postDto" id="post">
    <result column="id" property="id"/>
    <result column="user_id" property="userId"/>
    <result column="img_url" property="imgURL"/>
    <result column="create_time" property="createTime"/>
    <collection property="comments" ofType="com.home.dto.CommentDto"
      select="com.home.mapper.CommentMapper.findByPostId" column="id"/>
  </resultMap>

기본적으로 myBatis의 resultMap에서는 table column과 dto property의 이름이 같다면 굳이 쓰지 않아도 자동으로 매핑을 해준다.

하지만 위와 같이 collection을 사용하게 되면 문제가 될 수 있는데 마지막에서 첫번째 줄에서 column으로 id를 썼기 때문에 myBatis가 id라는 column은 매핑이 되었다고 본다. 따라서 위의 두번째 줄과 같이 dto의 id와 column id를 매핑하지 않게 되면 table column에서 가져온 값이 property에 적용이 안된다. 모르면 시간 잡아먹기 좋은 문제이니 알아두면 좋을 듯하다.