728x90
핵심 요약
어노테이션 | 역할 | 적용 위치 |
@Mapper | Mapper 인터페이스 개별 등록 | 각 Mapper 인터페이스에 직접 |
@MapperScan | 지정된 패키지의 Mapper 일괄 등록 | @SpringBootApplication 클래스 위 |
1. @Mapper 어노테이션 – 인터페이스에 직접 명시
예시
@Mapper
public interface UserMapper {
User selectUserById(int id);
}
- Spring이 이 인터페이스를 자동으로 Bean 등록해 줍니다.
- 인터페이스 하나하나에 다 붙여야 해서, Mapper가 많은 경우 번거로움이 있어요.
2. @MapperScan 어노테이션 – 패키지 단위로 한 번에 처리
예시
@SpringBootApplication
@MapperScan("com.example.project.mapper") //이 패키지 안 Mapper 자동 등록
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
- 지정한 패키지 안의 모든 Mapper 인터페이스를 스캔해서 스프링 빈으로 등록
- Mapper마다 @Mapper를 붙이지 않아도 됩니다
비교 요약
항목 | @Mapper | @MapperScan |
사용 위치 | 인터페이스 개별 | 메인 클래스 또는 설정 클래스 |
스프링 빈 등록 방식 | 인터페이스에 직접 | 자동 패키지 스캔 |
장점 | 명시적이고 명확함 | 유지보수 편리, 코드량 줄어듦 |
단점 | Mapper마다 붙여야 함 | 패키지 구조 주의 필요 |
실전 팁
- 둘 다 사용할 필요는 없어요. 하나만 선택해서 사용하는 것이 일반적입니다.
- 많은 프로젝트에서는 @MapperScan 방식을 선호합니다. (코드 간결)
- 단, Mapper를 별도 구성하거나 테스트 시에는 @Mapper가 더 명확할 수 있어요.
보너스: Config 클래스에서 @MapperScan 사용도 가능
@Configuration
@MapperScan("com.example.project.mapper")
public class MyBatisConfig {
}
다중 모듈 프로젝트에서 유용하게 쓰입니다.
마무리 요약
선택 | 기준추천 방식 |
소규모 프로젝트, 명시적 관리 | @Mapper |
중대형 프로젝트, Mapper가 많은 경우 | @MapperScan |
LIST
'Mybatis > MyBatis + Spring 연동' 카테고리의 다른 글
트랜잭션 처리 및 예외 관리 (0) | 2025.04.17 |
---|---|
Spring Boot에서 MyBatis 설정하기 (0) | 2025.04.17 |