본문 바로가기
Framework/MyBatis

Mapper 인터페이스를 사용한 프로젝트

by 예스p 2023. 4. 24.

Mapper 인터페이스

마이바티스 3.0에서부터 제공하는 기능인 @Mapper를 사용하면

프로젝트 레이어가 간단해질 수 있다.

MVC 레이어에 대해 알아보고, 프로젝트 구성에 대해서도 살펴본다.


MVC와 레이어

  • Spring에서는 MVC에 Service라는 것과 DAO라는 개념이 추가된다.
  • MVC 
    - Model : DB에서 data를 가져와 메모리에 올려놓은 것  
    - View : jsp, html 단에서 보여주는 것 
    - Controller : 이 두 가지를 연결해주는 것
    - DAO(Repository) : Data Access Object, db와 소통하는데 사용하는 레이어
    Service : 로그인 서비스, 검색 서비스, 이메일 서비스 등과 같이 독립적인 로직을 갖는 처리 단위
  • 다양한 프로젝트 구조
    - Controller > Service > Repository > mapper.xml
    - Controller > Service > Repository > Mapper > mapper.xml
    - Controller > Service > Mapper > mapper.xml

 

 


DAO 톺아보기

데이터 엑세스 계층인 DAO(Repository)에서

Mapper의 개념을 분리해서 살펴보자


Repository란

  • 스프링 프레임워크에서 사용되는 개념
  • 데이터 엑세스 계층에서 데이터 생성, 읽기, 업데이트 및 삭제에 사용된다.
  • DB와 직접 상호작용하지 않으며, Spring Data JPA, Spring JDBC 등의 스프링 데이터 기술을 사용하여 데이터 엑세스를 처리한다.
  • 저수준의 Logic과 고급 비즈니스 Logic을 분리하고 domain logic으로부터 DB관련 mechanism을 숨기기 위해 사용된다.
  • 등록하기 : @Repository
    - 레이어 선언적 기능과 bean 등록 기능이 있다.

 

 

Mapper란

  • MyBatis와 같은 SQL 매퍼 프레임워크에서 사용되는 용어
  • Repository에 포함되는 개념
  • sql문(xml)과 메소드(java)를 연결하고 결과값을 정의해놓은 타입으로 매핑시켜주는 역할
    >> 메소드로 sql을 쓸수 있게 한다.

 

 


Mapper 인터페이스

Mapper 인터페이스를 사용하여 기존 사용하던

Controller > Service > DAO > Mapper.xml 

방식에서 벗어나

Controller > Service > Mapper > Mapper.xml 

구성을 사용해본다.


Mapper 인터페이스

  • Mybatis 매핑XML에 기재된 SQL을 호출하기 위한 인터페이스
  • 사용시의 장점
    - SqlSession을 등록하지 않아도 된다.
    - DAO클래스를 생성하지 않아도 된다.
    - SQL 호출이 간단해진다.
      (ex. 이전방식 sesseion.selectOne(“com.test.mapper.TimeMapper.getReplyer, bno ) 처럼 길게 작성하지 않아도 된다.)
    - selectOne, insert, delete 등 메소드를 사용하지 않아도 된다.
    - 문자열로 작성하기 때문에생기는 버그를 줄일 수 있다.
  • 기존 DAO에서 하던 역할(SqlSession사용 및 MyBatis의 SQL메소드 호출)을 흡수하기 때문에 DAO클래스를 생성하지 않아도 된다.

 

 

프로젝트 만들기

  1. Mapper로 쓸 인터페이스를 만든 후 @Mapper 어노테이션을 붙여준다.
  2. 인터페이스와 동일한 이름으로 xml 파일을 만든다(일치하지 않는 경우 추가 설정 해야함)
    *생성위치 :
    - 보통 프로젝트/src/main/resources가 기본 인식 위치이다.
    - 여기서 추가되는 경로는 application.propertoes에 입력해야한다.
    - ex: mybatis.mapper-locations=mapper/**/*.xml
  3. xml의 네임스페이스에 인터페이스의 풀패키지명을 입력한다.
  4. 인터페이스에 정의해둔 메소드명을 sql태그의 id에 입력함으로써 간단하게 호출한다. 

 

 

 

 

 

 

 

댓글