?
Db통신과 관련된 여러 프로젝트를 참조하다가 프로젝트 별로 Mapper를 사용하는 방식이 달랐는데 왜 다른지 궁금해서 차이점 분석
![](https://velog.velcdn.com/images/won4932/post/4e9a45d6-f0c5-4ab8-8540-edfe059f16e8/image.png)
Mybatis로 db Connection간 Mapper의 운용방법 별 비교 및 차이
- Mapper namespace 직접 호출 VS Mapper Interface 클래스
xml 직접 호출
- 장점 : 설정이 간단(mybatis xml 파일만 설정), 파일을 추가로 생성할 필요가 없고 코딩이 줄어든다
- 단점 : SqlSession 을 이용하여 조회할 경우 조회의 성격에 대해 알아야 한다(selectOne, selectList...등), 어떤 ID들이 있는지 확인하려면 쿼리가 긴게 많을경우 알아보기가 힘들다, namespace 와 SQL ID를 풀로 써야하기 때문에 오타로 인한 에러유발이 가능
Mapper Interface 사용 후 xml 호출
- 장점 : Mapper 를 열어보지 않아도 어떤 ID값을 가지고 있는지 한눈에 알아볼 수 있다, SQL을 호출하려는 주석을 Interface 파일에 넣어줄 수 있기 때문에 주석만 제대로 달려있다면 SQL에 대한 내용을 확인하기 쉽다, 오타에 대한 우려가 적어진다, 인터페이를 통해 MultiRow인지 SingleRow인지 알기 때문에 SqlSession 안에 있는 특정 메소드를 분리하여 사용할 필요가 없다
- 단점 : 파일이 하나 더 생성 된다, 코딩이 살짝 더 늘어난다(설정 및 Interface), 파일의 Package와 파일명을 namespace에 맞춰서 생성해야 한다
결론
유지보수 관리입장에서는 Mapper Interface가 좀 더 낫다는 의견이 있는데 Interface의 경우 나중에 인터페이스만 보게 되면 어떤 SQL이 있는지 전체적으로 보기 쉬우나 직접 호출하게 되면 여러 소스 코드들이 들어가기 때문에 한 눈에 보기가 어렵다