Mybatis 에서 SQL을 저장한 MAPPER를 연결하는 방법은 크게 2가지 이다.
1) Mapper namespace 를 직접 입력하여 호출하는 방법.
2) Interface 클래스를 만들어서 매핑, 호출하는 방법.
서로의 장단점이 있는데
### 1번은
장점
- 설정이 간단하다.(mybatis xml 파일 설정.)
- 파일을 추가로 생성할 필요가 없다.
- 코딩이 줄어든다.
단점
- namespace 와 SQL ID를 풀로 써야하기 때문에 오타로 인한 에러유발이 가능하다.
- 쿼리에 대한 주석을 넣으려면 Mapper 파일을 직접 열어야 하는데, 해당 Mapper파일을 Find로 직접 찾아야 한다.
- 어떤 ID들이 있는지 확인하려면 쿼리가 긴게 많을경우 알아보기가 힘들다.
- SqlSession 을 이용하여 조회할 경우 조회의 성격에 대해 알아야 한다.
. 단일이면 selectOne, 여러행의 경우 selectList 등 분류해서 메서드를 사용해야 한다.
### 2번은
장점
- Mapper 를 열어보지 않아도 어떤 ID값을 가지고 있는지 한눈에 알아볼 수 있다
. 쿼리를 제외하고 호출하는 부분만 있기 때문에 한번에 볼 수 있다.
- SQL을 호출하려는 주석을 Interface 파일에 넣어줄 수 있기 때문에 주석만 제대로 달려있다면 SQL에 대한 내용을 확인하기 쉽다.
- 오타에 대한 우려가 적어진다.
. 자바측에서 메서드를 호출하기 때문에 이클립스에서 자동으로 오류체크 해줌.
. 다만 Mapper의 SQL ID와는 정확히 매칭시켜줘야 하는 번거로움이 있긴 함.
- 인터페이를 통해 MultiRow인지 SingleRow인지 알기 때문에 SqlSession 안에 있는 특정 메소드를 분리하여 사용할 필요가 없다.
단점
- 파일이 하나더 생성 된다.(Mapper를 추가할때마다 생성해줘야함)
- 작성해야 할 코딩이 1줄이상 늘어난다.
- 파일의 Package와 파일명을 namespace에 맞춰서 생성해야 한다.
- 설정에 코딩이 몇줄 더 들어간다.
유지보수 관리입장에서는 2번이 좀더 낫다는 의견이 있다.
그 이유중 하나로 1번의 경우 쿼리를 호출하는데 'com.ns.test.getTestList' 와 같은 풀네임을 쓴다면 이중 하나라도 오타가 나면 불편하고, 이 쿼리가 어떤 용도로 쓰이는지 알아보기 위해서는 Ctrl + H 를 이용해 Mapper를 직접 찾아봐야 하는 경우가 있기 때문이다
(대체로 Service에 적혀있는 주석과 SQL호출 목적의 주석이 동일한 경우가 많지만 복잡한 로직일수록 복수의 쿼리가 호출될 수 있고 각각의 주석을 간략하게 달아줄 순 있지만 그렇게 될경우 Service의 길이가 길어지는 단점이 있다.)
반대로 개발속도는 1번이 빠를수밖에 없는데 적은 코딩수는 주석을 상세히 안다는( ...) 경우가 종종 존재하기 때문.(하하;)
위의 상황에 맞춰 취향껏 쓰면 되겠다.
'공부 > 프로그래밍' 카테고리의 다른 글
[Spring] Mybatis 설정하기 (기본설정) (0) | 2017.04.20 |
---|---|
[Spring] Mybatis 에서 Insert 시 자동 생성키 이용하기 (0) | 2017.04.20 |
[Spring] web.xml 설정. (2) | 2017.04.18 |
도커 docker 간단 명령어 (컨테이너/이미지 확인 삭제) (0) | 2017.04.17 |
Mysql procedure(프로시저) CURSOR(커서) 실행하기. (0) | 2017.04.14 |
댓글