SPRINGBOOT
[SpringBoot] DAO와 Mapper 인터페이스의 차이?
정공자씨
2024. 1. 10. 17:33
1. DAO와 Mapper 인터페이스의 정의
DAO
- Date Access Object
- 데이터베이스(DB)의 데이터에 접근하는 객체
- 즉, DB에 접근하여 데이터를 조회하고 조작하는 기능을 하는 객체
- DAO 구조는 인터페이스와 그 인터페이스를 구현한 클래스의 결합된 형태
- Controller.java > Service.java > ServiceImpl.java > DAO.java > Mapper.xml
Mapper interface
- Mybatis의 mapping xml 파일에 작성된 sql을 호출하기 위한 인터페이스
- 단순 인터페이스
- 인터페이스를 구현한 클래스 사용하지 않음
- mybatis 3.0 이상부터 지원
- Controller.java > Service.java > Mapper.java > Mapper.xml
2. 사용 시 차이점
Mapper 인터페이스를 사용하지 않을 경우 : DAO 사용 시
1. SqlSession을 등록하여 사용
2. DAO 인터페이스와 이 인터페이스를 구현한 DAO 클래스 생성이 필요
3. SQL 호출 시에, namespace + , + sql ID를 지정하여 사용session.selectOne("com.example.mapper.BoardMapper. getBoardList", board_no); //namespace(com.example.mapper.BoardMapper), sql ID(getBoardList)
4. select, selectOne, insert, update, delete 등 제공하는 메서드를 사용하여야 함
@Repository public class BoardDaoImpl implements BoardDao { @Autowired private SqlSession session; @Override public List<BoardDto> selectList { return session.selectOne("com.example.mapper.BoardMapper.selectList", board_no); } }
Mapper 인터페이스 사용 시
1. mapper.xml의 SQI ID는 Mapper 인터페이스에 정의된 메서드명과 동일하게 작성
2. mapper.xml의 namespace는 패키지명을 포함한 mapper인터페이스명으로 작성
3. @Mapper 어노테이션을 사용하여 등록
BoardMapper 인터페이스
@Mapper
public interface BoardMapper {
List<BoardDto> getBoardList();
}
BoardMapper.xml
<mapper namespace="com.example.mapper.BoardMapper"> // 1.namespace = 패키지명 포함한 mapper인터페이스명
<select id="getBoardList"> // 2.sql ID = mapper인터페이스의 메서드명
select * from board orderby board_no desc;
</select>
</mapper>