개린이 탈출기

[MyBatis] 조회 시, 컬럼 명이 중복되도록 조회하는 경우 (alias 사용) 본문

Database ~ SQL

[MyBatis] 조회 시, 컬럼 명이 중복되도록 조회하는 경우 (alias 사용)

yooverd 2025. 3. 27. 18:21
728x90
반응형
SMALL
SELECT CATEGORYID
	, CATEGORYNAME
	, DESCRIPTION AS CATEGORYNAME
FROM CATEGORIES
WHERE CATEGORYID = 9

 

만일 다음과 같은 쿼리를 조회했을 때 db 툴은 어떤 모습으로 데이터를 조회 시켜줄까?

 

 

위의 쿼리 조회 결과

 

alias 를 사용하였기 때문에 db툴을 이용하여 조회했을 땐, 다음과 같은 모습으로 조회된다.

즉, 컬럼명을 동일하게 뽑아서 보여준다.

 

 

그렇다면 MyBatis 를 이용하는 경우엔 객체에 컬럼명이 중복되는데, 어떻게 매핑해줄까? 

결론부터 말하자면 alias 를 적용하기 전 실제 컬럼명이 더욱 우선순위를 갖게 되는 것 같다.

 

public class TestDTO {
    private String categoryid;
    private String categoryname;
}
<select id ="testOfDupCol" resultType="TestDTO">
    SELECT CATEGORYID
    , CATEGORYNAME
    , DESCRIPTION AS CATEGORYNAME
    FROM AMISDBA.CATEGORIES
    WHERE CATEGORYID = 9
</select>

위의 Mapper를 실행한 경우, 다음과 같이 데이터가 조회된다.

 

물론 환경설정, mapping 등의 설정에 따라 다르겠지만,

기본적으로는 기존 컬럼명으로 조회하는 경우, 해당 컬럼의 값이 dto 의 필드에 할당되는 것 같다.

 

만일 중복되는 컬럼을 없애고 조회하면 데이터가 모두 적절히 들어가는 것을 확인할 수 있었다.

<select id ="testOfDupCol" resultType="TestDTO">
    SELECT CATEGORYID
    , DESCRIPTION AS CATEGORYNAME
    FROM AMISDBA.CATEGORIES
    WHERE CATEGORYID = 9
</select>

위의 Mapper를 실행한 경우, 다음과 같이 데이터가 조회된다

관련 글들을 찾아보았는데, 나와 비슷한 케이스에서도 마찬가지로 컬럼명이 우선순위를 가졌다.

 

이렇게 컬럼명이 겹치는 경우, resultMap을 적절히 활용하면 해결할 수 있을 것 같다.

애초에 필드명이 중복되지 않도록 설정하는 것이 더욱 현명하고 논리적으로도 옳은 방식인 것 같다.

 

참고

 

[MyBatis] 데이터베이스 컬럼명과 xml에서 매핑한 필드명의 관계에 대하여

마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다.

velog.io

 

 

 

 

 

728x90
반응형
LIST