[Java/Spring] MyBatis typeAlias 사용법
Java로 서버개발을 할 때 MyBatis를 자주 사용하게 될 것이다.
이 때 MyBatis의 typeAlias 라는 것을 사용할 수가 있는데,
Alias는 "별칭" 이라는 의미로 사용자가 직접 정의하는 이름(별명)을 붙여주는 것이다.
MyBatis를 사용하여 데이터를 처리할 때, 일반적으로 결과 데이터와 매핑되는 Java 클래스를 생성하게 된다.
이 때 해당 Java 클래스의 Alias를 지정하여 사용하는 방법에 대해 알아보자.
1) typeAlias란
: MyBatis를 이용하여 DB의 데이터를 받아 자바의 VO 객체에 담거나,
반대로 자바 VO 객체의 데이터를 DB에 전송하는 과정에서
보다 간결하게 코드를 작성하기 위해 사용하는 것이다.
클래스의 경로를 별칭을 사용하여 정의해두고,
이 별칭을 클래스 경로 대신 활용할 수 있다.
2) typeAlias를 사용하는 이유
- 동일한 VO 클래스 파일을 여러 번 사용할 경우 매번 클래스의 경로 전체를
입력해야하는 번거로움이 있는데,
alias를 사용함으로써 간결하고 가독성이 좋은 코드를 작성할 수 있다. - 클래스 이름이나 패키지 경로가 바뀌는 등 변경사항이 발생하였을 때
xml 파일을 일일히 수정하지 않아도 되기 때문에 유지보수성이 향상된다.
3) typeAlias 사용 방법
3-1) alias를 사용하지 않는 경우
: mapper xml의 resultType에 객체 클래스 파일의 경로를 전부 작성한다.
사용예시
3-2) 객체(VO) 클래스 파일에 정의
: 객체 클래스 파일에 annotation으로 alias 정의가 가능하다.
- 사용방법
@Alias("별칭")
public class model {
.
.
사용예시
3-3) config xml 파일에 typeAlias 태그로 정의
: Java에서 myBatis를 사용한다면,
myBatis에 대한 다양한 설정을 세팅할 수 있는 xml 파일이 필요하다.
이 xml 파일 내에서 typeAlias 또한 세팅할 수 있는데,
라는 태그 안에 정의하면 된다.
각각의 VO 클래스 파일의 경로를 어떤 이름으로 사용할 것인지를 해당 태그 안에 정의하면,
실제 쿼리의 resultType에 위에서 정의한 이름으로 사용이 가능하다.
사용예시
1. typeAlias 정의
2. 쿼리 resultType 사용
3-4) config xml 파일에 package 태그로 정의
: 앞선 typeAlias 태그로 정의하는 방법과 비슷하지만, 다른 점이 있다.
위의 typeAlias 태그는 하나의 클래스 파일에 대해서 각각 별칭을 정의해줄 수 있다면,
package 태그는 정의한 패키지 내의 여러 개 클래스 파일을 한 번에 정의해줄 수 있다.
VO 클래스에 따로 Alias annotation을 정의해주지 않는다면,
쿼리에서는 클래스명으로 사용할 수 있다.
사용예시
4) typeAlias 적용 시 유의해야할 점
: typeAlias를 적용할 때, 쿼리의 결과값을 VO 클래스 파일로 전달받는 경우 유의해야할 점이 있다.
SELECT 쿼리의 컬럼 값과 전달 받는 VO의 컬럼이 정상적으로 매핑이 되어야 한다.
이를 위해 미리 정의해두어야 할 것이 있는데, config xml 파일에 아래 내용을 추가로 기재하였다.
여기서 mapUnderscoreToCamelCase 옵션의 의미는,
언더바(_)를 기준으로 카멜 케이스(Camel Case)로 변환해준다는 의미이다.
해당 옵션을 적용해주면 더욱 편리하게 typeAlias를 사용할 수 있다.
사용예시
1. SELECT 쿼리
2. VO class
위의 예시처럼 mapUnderscoreToCamelCase 옵션을 사용한다면,
쿼리에서는 "SHOP_CD" 인 컬럼의 값이 VO 모델 클래스에서 "shopCd" 의 카멜 케이스로 정상 매핑이 된다.
[rerefence]
https://jeonyoungho.github.io/posts/mybatis-alias/
https://chunstory.tistory.com/26
https://m.blog.naver.com/sky_14786/221799604116