본문 바로가기
SPRINGBOOT

[SpringBoot] DAO와 Mapper 인터페이스의 차이?

by 정공자씨 2024. 1. 10.

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 IDMapper 인터페이스에 정의된 메서드명과 동일하게 작성
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>

 

 

 

 

 

 

참고   https://doongjun.tistory.com/43