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

'Framework > MyBatis' 카테고리의 다른 글
| <selectKey> : insert + select를 한번에 (0) | 2023.04.20 |
|---|---|
| 스프링에서 직접 트랜잭션 제어하기 : @Transactional (0) | 2023.04.19 |
| [03] SQL문 응용태그 : 동적 SQL, <association>, <collection> (0) | 2023.02.15 |
| [02] 페이징처리 : RowBounds (0) | 2023.02.14 |
| [01] Mybatis의 CRUD 방식 (0) | 2023.02.13 |
댓글