[MyBatis] resultMap 에서 collection null 처리

갓김치·2021년 5월 31일
0

예외

목록 보기
4/28

sql

    <select id="selectBoardList"
            parameterType="{package}.vos.PagingVO"
            resultMap="boardMap">
        SELECT
               A.BOARD_NO AS `BOARDNO`
             ,A.BOARD_TITLE
             ,A.BOARD_CONTENT
             ,A.BOARD_WRITER
             ,A.BOARD_DATE
             ,A.BOARD_SRC
             ,A.BOARD_LINK
             ,A.BOARD_HITS
             ,A.BOARD_TYPE
             ,B.BOARD_FILE_NO
             ,B.BOARD_FILE_SAVE
             ,B.BOARD_FILE_ORG
             ,B.BOARD_FILE_SIZE
             ,B.BOARD_FILE_MIME
             ,B.BOARD_FILE_FANCY
        FROM BOARD A
        LEFT JOIN BOARDFILE B on A.BOARD_NO = B.BOARD_NO
        WHERE A.BOARD_TYPE = #{searchDetail.boardType}
        ORDER BY A.BOARD_NO desc
        LIMIT #{startRow}, #{endRow}
    </select>

mybatis

as-is

<resultMap id="boardMap" type="BoardVO" autoMapping="true">
	<id property="boardNo" column="BOARDNO"/>
	<collection property="boardFileList"
        	ofType="{package}.vos.BoardFileVO"
		autoMapping="true">
		<id property="boardFileNo" column="BOARD_FILE_NO"/>
	</collection>
</resultMap>
  • 이렇게 하면 파일이 없는데도 자꾸 BOARDNO가 매핑되어서 파일리스트에 적어도 1개의 파일 객체가 생성되서 들어감

to-be

<resultMap id="boardMap" type="BoardVO" autoMapping="true">
	<id property="boardNo" column="BOARDNO"/>
	<collection property="boardFileList"
        	ofType="{package}.vos.BoardFileVO"
		notNullColumn="board_file_no" autoMapping="true">
		<id property="boardFileNo" column="BOARD_FILE_NO"/>
	</collection>
</resultMap>
  • notNullColumn 에 BOARD_FILE 테이블의 PK인 board_file_no를 추가해주면 파일이 없으면 객체가 생성되지 않아 파일리스트의 사이즈도 0이 된다.

but...

  • 아직도 왜 resultsettable에 column alias가 적용안되는지 모르겠음
profile
갈 길이 멀다

0개의 댓글