728x90
RestAPI를 통해 MyBatis로 테이블 셀렉 작업을 하는데 결과 값이 모두 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에 테이블 조회 결과값들을 못 담는다.
그래서 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
'웹개발 > Java, Spring' 카테고리의 다른 글
[Spring Boot] 스프링부트 & MyBatis 게시판 파일 다운로드 예제 (1/2) (0) | 2024.07.07 |
---|---|
[Spring Boot] 스프링부트 & MyBatis 게시판 파일 업로드 예제 (0) | 2024.07.06 |
[Spring Boot] MyBatis SQL 쿼리 로그 설정 (0) | 2024.06.29 |
[Spring Boot] Thymeleaf HTML 템플릿 수정 시 브라우저 반영 설정 (0) | 2024.06.26 |
[Spring Boot] MyBatis + PostgreSQL 연동 (2) | 2024.06.25 |