본문 바로가기
Mybatis/MyBatis + Spring 연동

@MapperScan, @Mapper 어노테이션 사용

by DEVLIB 2025. 4. 17.
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