[JAVA]Mapper vs DAO

2022. 2. 8. 09:00· Java
목차
  1. Mapper란?
  2.  
  3. DAO란?
  4. Mapper vs DAO
  5. 결론
반응형

Mapper란?

  • Mybatis 매핑XML에 기재된 SQL을 호출하기 위한 인터페이스이다. Mybatis3.0부터 생겼다.

 

DAO란?

  • Data Access Object의 약어로 실질적으로 DB에 접근하여 데이터를 조회하거나 조작하는 기능을 전담하는 객체를 말한다. DAO의 사용 이유는 효율적인 커넥션 관리와 보안성 때문이다. DAO는 저수준의 Logic과 고급 비즈니스 Logic을 분리하고 domain logic으로부터 DB관련 mechanism을 숨기기 위해 사용한다.

 

Mapper vs DAO

DAO를 사용하는 방법

  • SqlSession을 등록해줘야 한다.
  • DAO인터페이스와 인터페이스를 구현한 DAO클래스를 생성해줘야한다.
  • Mapper인터페이스를 사용하지 않았을 때는 네임스페이스 + “.” + SQL ID로 지정해서 SQL을 호출해야한다.(예를들면 sesseion.selectOne(“com.test.mapper.TimeMapper.getReplyer, bno ))
  • selectOne, insert, delete 등 제공하는 메소드를 사용해야 한다.
  • 문자열로 작성하기 때문에 버그가 생길 수 있다.
  • IDE에서 제공하는 code assist를 사용할 수 없다.

 

BoardService.java

@Service("boardService")
public class ProductInqManageService {
	@Resource(name="boardDAO")
	private BoardDAO boardDAO;
    
    /**
	 * 목록 조회
	 * @param boardVO
	 * @return
	 */
	public BoardVO findOneByDetail(BoardVO boardVO){
		return boardDAO.selectList(boardVO);
	}
}

 

BoardDAO.java

@Repository("boardDAO")
public class ProductInqManageMapper extends EgovAbstractMapper{
	@Resource(name="egov.sqlSession")
	public void setSqlSessionFactory(SqlSessionFactory sqlSession) {
		super.setSqlSessionFactory(sqlSession);
	}
    /**
	 * 목록 조회
	 * @param boardVO
	 * @return
	 */
	public List<?> selectList(BoardVO boardVO) {
		return getSqlSession().selectList("BoardMapper.selectList", boardVO);
	}
}

 

BoardMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="BoardMapper">
<select id="selectList" parameterType="BoardVO" resultType="BoardVO"> 
    SELECT 
    	 id,
         title,
         contects
    FORM board
    WHERE 1=1
</select>

 

Mapper인터페이스를 사용하는 방법

  • Mapper인터페이스는 개발자가 직접 작성한다.
  • mapper 네임스페이스는 패키지명을 포함한 인터페이스 명으로 작성한다.
  • SQL id는 인터페이스에 정의된 메서드명과 동일하게 작성한다

BoardService.java

@Service("boardService")
public class ProductInqManageService {
	@Autowired
	private BoardMapper boardMapper;
    
    /**
	 * 목록 조회
	 * @param boardVO
	 * @return
	 */
	public BoardVO selectList(BoardVO boardVO){
		return boardMapper.selectList(boardVO);
	}
}

BoardMapper.java

@Mapper
@Repository
public interface BoardMapper{

    /**
	 * 목록 조회
	 * @param boardVO
	 * @return
	 */
    public List<BoardVO> selectList(BoardVO boardVO)
}

BoardMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.BoardMapper">
<select id="selectList" parameterType="BoardVO" resultType="BoardVO"> 
    SELECT 
    	 id,
         title,
         contects
    FORM board
    WHERE 1=1
</select>

결론

구조가 Mybatis3.0 이후로 나온 방식이기 때문에 더 최근에 나온 방식이며 사용하기도 더 편리하다. 단 DB에 접근하는 Layer명을 Mapper로 할지 DAO로 할지(혹은 Repository)로 할지는 개발자 기호에 맞게 정해서 구조를 잡으면 될 것 같다. DB와 연동되는 인터페이스의 용어가 Mapper보단 DAO가 좋다 싶으면 1)구조로 가되 명명규칙만 DAO로 변경하면 된다. 단 xml파일의 수정이 조금 필요하다.(Mapper.xml과 인터페이스의 파일명이 일치하지 않는 경우 추가 조치가 필요하다.)

반응형
저작자표시 비영리 변경금지 (새창열림)

'Java' 카테고리의 다른 글

[JAVA] Spring Annotation @MapperScan이란?  (0) 2022.08.17
[JAVA]Spring Boot 압축 파일 다운받기(Spring boot zip file download)  (0) 2022.05.09
[JAVA] Primitive type(기본 타입) VS Reference type(참조 타입)  (0) 2022.04.11
[JAVA] @ReqeustBody와 @ResponseBody 란?  (0) 2022.02.12
[JAVA] DTO vs VO  (0) 2022.02.10
  1. Mapper란?
  2.  
  3. DAO란?
  4. Mapper vs DAO
  5. 결론
'Java' 카테고리의 다른 글
  • [JAVA]Spring Boot 압축 파일 다운받기(Spring boot zip file download)
  • [JAVA] Primitive type(기본 타입) VS Reference type(참조 타입)
  • [JAVA] @ReqeustBody와 @ResponseBody 란?
  • [JAVA] DTO vs VO
TaeHuiLee
TaeHuiLee
창업, 사업, 자기개발, 운동, Web, App, Java, python, 이슈, 개발자, JavaScript, amazon, cloud server, 취업, 스펙, Android Studio, Spring, React, Node.js, 구독하면 댓글 남겨주세요.
Developer_TaeHui 창업, 사업, 자기개발, 운동, Web, App, Java, python, 이슈, 개발자, JavaScript, amazon, cloud server, 취업, 스펙, Android Studio, Spring, React, Node.js, 구독하면 댓글 남겨주세요.
TaeHuiLee
Developer_TaeHui
TaeHuiLee
  • 분류 전체보기 (228)
    • WEB (71)
    • Java (38)
    • APP (17)
    • 딥러닝 (2)
    • DB (5)
    • 알고리즘 (17)
    • Python (10)
    • AWS (5)
    • Git (8)
    • Docker (13)
    • 창업 (2)
    • Java Script (5)
    • 군집드론 (3)
    • C언어 (1)
    • IT 지식 (16)
    • Rust (1)
    • Tomcat (1)
    • Nginx (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 정렬
  • 수원 맛집
  • Java
  • 강릉 맛집
  • 선택정렬
  • 자바
  • 도커
  • 티스토리챌린지
  • ubuntu
  • github
  • Spring
  • Queue
  • 수원역 맛집
  • WSL
  • 관상 어플
  • GIT
  • mariadb
  • axios
  • 어플
  • 오블완
  • DB
  • Nuxt
  • 서울 맛집
  • docker
  • python
  • 파이썬
  • VUE
  • javascript
  • spring boot
  • 알고리즘

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
TaeHuiLee
[JAVA]Mapper vs DAO
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.