728x90

RestAPI를 통해 MyBatis로 테이블 셀렉 작업을 하는데 결과 값이 모두 Null값이어서 당황했다.

Null이 풍년

 

대체 왜이런건지 컨트롤러, 서비스, 매퍼 xml 등 살펴보다가 

Select 쿼리 결과를 담는 DTO의 변수명들과 해당 테이블들의 칼럼명이 일치하지 않기 때문이라는 것을 알게되었다.

 

@Getter
@ToString
public class FileResponse {
	private int seq;
	private int boardSeq;
	private String originalName;
	private String saveName;
	private long size;
	private String deleteYn;
	private Timestamp createdDate;
	private Timestamp deletedDate;
}

DTO의 변수명과 테이블 칼럼명이 다르다.

 

이렇게 서로 다를 경우에는 내가 만든 DTO에 테이블 조회 결과값들을 못 담는다.

 

그래서 Mapper XML 내에 따로 작업을 해줘야 하는데 그 방법이 바로 ResultMap 태그를 이용하는 것이다.

 

 

1. Mapper.xml 내 ResultMap 설정

	<resultMap type="com.example.file.dto.FileResponse" id="fileResponse">
		<result property="seq" column="SEQ"/>
		<result property="boardSeq" column="BOARD_SEQ"/>
		<result property="originalName" column="ORIGINAL_NAME"/>
		<result property="saveName" column="SAVE_NAME"/>
		<result property="size" column="SIZE"/>
		<result property="deleteYn" column="DELETE_YN"/>
		<result property="createdDate" column="CREATED_DATE"/>
		<result property="deletedDate" column="DELETED_DATE"/>
	</resultMap>
  • type="com.example.file.dto.FileResponse":  쿼리 조회 결과를 담을 DTO 클래스 경로를 입력한다.
  • id="fileResponse": 해당 ResultMap 태그의 독자적인 식별 아이디를 입력한다.
  • property="DTO 변수명": 칼럼과 연결할 DTO의 변수명을 입력한다.
  • column="칼럼명": DTO 변수와 연결할 칼럼명을 입력한다.

 

2. Mapper.xml 내 Select 태그 수정

	<select id="getFilesByBoardSeq" resultMap="fileResponse">
		SELECT 
			SEQ,
			<include refid="fileColumns"></include>
		FROM
			BOARD_FILE
		WHERE
			DELETE_YN = 'N'
			AND BOARD_SEQ = #{boardSeq}
	</select>
  • resultMap="fileResponse": 앞서 정의한 resultMap 태그의 id 값을 입력한다.

 

※ 결과

728x90