Spring 프로젝트를 진행하면서 Mybatis를 사용할 때 두 가지의 프로젝트 패턴이 보인다.
- Controller.java > Service.java > Mapper.java > Mapper.xml
- Controller.java > Service.java > ServiceImpl.java > DAO.java > Mapper.xml
Mapper와 DAO로 명칭하되, 차이점은?
version
- Mapper는 Mybatis 3.0 버전 이후에 나온 패턴
- DAO는 기존 Mybatis에서 사용하는 패턴
차이점
- Mapper.java는 단순 인터페이스
- DAO.java는 인터페이스와 클래스의 결합된 형태
Mapper
Mapper 인터페이스를 사용안하는 경우, 즉 DAO인 경우
- SqlSession을 등록해줘야함
- DAO인터페이스와 인터페이스를 구현한 DAO 클래스를 생성해주어야함 ( ex. Impl)
- 네임스페이스 + "."+SQL ID로 지정해서 SQL를 호출해야함
( ex. session.selectOne("com.test.mapper.LoginMapper.getLoginCheck, vo) )
- selectOne, insert, delete 등 제공되는 메소드를 사용해야함
- 문자열로 작성하기 때문에 버그가 발생
- IDE에서 제공하는 code assist를 사용 못함
글을 쓴 이유?
mybatis를 처음 연동했을 때, 3번째 특징인 네임스페이스가 매우 거슬렸고 DAO로 이미 연동을 했더니 한 프로젝트에서 mapper를 복수 연동이 불가능함을 인지했습니다.
그래서 Mapper와 DAO의 정확한 차이를 알고, Mapper로 Mybatis를 연동하는 것을 목표로 삼는 것에 글을 작성했습니다.