Mapper 인터페이스 개념

Mapper 인터페이스

  • Mapping 파일에 기재된 SQL을 호출하기 위한 인터페이스
  • SQL을 호출하는 프로그램을 TypeSafe 하게 하기 위해 MyBatis3.x부터 등장
  • Mapping 파일에 있는 SQL을 자바 인터페이스를 통해 호출할 수 있도록 해줌

Mapper 인터페이스를 사용하지 않았을 때

  • SQL을 호출하는 프로그램은 SqlSession 의 메서드 아규먼트에 문자열로 네임스페이스+"."+SQLID로 지정해야 한다.
  • 문자열로 지정하기 때문에 오타에 의한 버그, IDE에서 제공하는 code assist 사용 불가

Mapper 인터페이스를 사용할 경우

  • UserMapper 인터페이스는 개발자가 작성한다.
  • 패키지 이름 + "." + 인터페이스 이름 + "." + 메서드 이름네임스페이스 +"." + SQLID 가 되도록 네임스페이스와 SQL의 ID를 설정해야 한다.
  • 네임스페이스 속성에는 패키지를 포함한 Mapper 인터페이스 이름
  • SQL ID 에는 매핑하는 메서드 이름을 지정

Mapper 인터페이스 작성 및 설정

Mapper 인터페이스 작성


Mapping 파일 수정


DAO 클래스 수정


MapperFactoryBean의 설정

  • MapperFactoryBean은 UserMapper을 구현하는 프락시 클래스를 생성하고 , 그것을 애플리케이션에 주입한다.
  • 프락시는 런타임 시에 생성되므로 지정된 Mapper는 실제 구현 클래스가 아닌, 인터페이스여야만 한다.
  • MapperFactoryBean은 sqlSessionFactory나 sqlSessionTemplate를 필요로 한다.

Mapper 인터페이스 사용 테스트


여러 개의 Mapper 인터페이스 설정

MapperScannerConfigurer의 사용

  • MapperFactoryBean을 이용해 Mapper 인터페이스를 등록할 때 매퍼 인터페이스의 개수가 많아지게 되면 일일이 정의하는데 시간이 많이 걸림
  • Mapper 인터페이스의 수가 많아지면 MapperScannerConfigurer를 이용하여 객체를 한 번에 등록하는 것이 편리
  • 지정한 패키지 아래 모든 인터페이스가 Mapper 인터페이스로 간주되어 Mapper 인터페이스의 객체가 DI 컨테이너에 등록되는 것

MapperScannerConfigurer의 설정

  • basePackage 속성에서 지정하는 것은 Mapper 인터페이스를 검색할 대상이 되는 Package
  • myspring.user.dao 아래 인터페이스들은 모두 Mapper 인터페이스에 대응하여 Mapper 객체가 생성됨
  • 예상하지 않은 다른 객체가 등록되어 오류 발생 가능성 있음


MapperScannerConfigurer의 테스트

에러발생


해결 - Marker 인터페이스와 Marker 어노테이션의 사용

  • 검색의 대상이 되는 Package 아래의 인터페이스들 중에서 Mapper 로서 작성한 인터페이스로만 범위를 좁히려면 Marker 인터페이스와 Marker 어노테이션을 작성하여 MapperScannerConfigurere에 설정

MapperScannerConfigurer에 Maker 어노테이션 지정

  • org.mybatis.spring.mapper.MapperScannerConfigurer 컴포넌트 스캔을 통하여 Mapper을 찾기 위한 설정
  • basePackage : Mapper을 찾는 베이스 패키지
  • annotationClass : Mapper를 지정하는 어노테이션 클래스


MapperScannerConfigurer의 재테스트

'Back-end > Spring' 카테고리의 다른 글

Spring MVC 환경설정  (0) 2021.06.14
Spring MVC 개요  (0) 2021.06.14
MyBatis 어플리케이션 작성(1)  (0) 2021.06.14
MyBatis 개요  (0) 2021.06.11
AOP 어플리케이션 작성(2) - Annotation  (0) 2021.06.11

+ Recent posts