본문 바로가기
프로그래밍/spring

[ 스프링부트 ] @Alias 어노테이션(type-aliases-package 설정) 사용해서 xml파일에 패키지명을 명시하지 않고 bean 사용하기

by freeelifee 2023. 2. 18.
728x90

@Alias를 사용하지 않은 경우, 패키지명을 붙여줘야 됨.

// org.example.app.dto.User 파일
public class User {
...
}

// xml 파일
// parameterType이나 resultType에 User 객체를 사용하기 위해서는 패키지명을 붙여줘야 됨.
<select id="getUserInfo" parameterType="org.example.app.dto.User" resultType="org.example.app.dto.User">
...
</select>

 

application.yml 파일에 type-aliases-package를 설정해주면 패키지명을 붙이지 않아도 mybatis가 bean을 찾을 수 있음.
org.example.app.dto에 있는 클래스는 @Alias가 없으면 소문자 클래스명으로 alias가 등록이 되며, @Alias를 명시해주면 설정된 값으로 alias가 등록이 됨. 

mybatis:
  type-aliases-package: org.example.app.dto

 

실제는 @Alias 값을 명시해줘도 내부적으로는 소문자로 등록이 됨.

// org.example.app.dto.User 파일
1) @Alias 설정 안한 경우, 클래스명 소문자인 "user"로 alias가 등록이 됨.
public class User {
...
}

2) @Alias 설정 한 경우, @Alias 값이 설정이 안되어 있으므로
  클래스명 소문자인 "user"로 alias가 등록이 됨.
@Alias
public class User {
...
}

3) @Alias에 값을 설정 한 경우, @Alias 값인 "User"로 설정이 되어야 하지만 내부적으로는 "user"로
  설정이 됨.
@Alias("User")
public class User {
...
}

 

mybatis 내부에 alias가 소문자로 저장이 되어 있으므로 parameterType을 어떻게 쓰든 소문자로 변환하여 alias와 비교하여 찾아감.

즉, parameterType이나 resultType에 "User"를 쓰든 "user"를 쓰든 결과는 같음.

아래는 모두 같음.

<select id="getUserInfo" parameterType="User" resultType="User">
<select id="getUserInfo" parameterType="user" resultType="User">
<select id="getUserInfo" parameterType="UsEr" resultType="User">
728x90

'프로그래밍 > spring' 카테고리의 다른 글

SpringBoot 프로젝트 생성하기  (0) 2023.07.21
Springboot에서 jsp 설정하기  (0) 2023.07.04
프로세스 중단 방법  (0) 2023.05.17