티스토리 뷰

Q. 질문

Spring의 웹 3계층을 공부하며 DAO가 Repository계층에 속한다는 블로그의 글을 본적이 있다. DAO / Mapper / Repository는 각각 어떤 차이점이 있을까?

 


A. 답변 

흔히 스프링 프로젝트의 구조는 2가지로 나뉜다고 한다.

 

1) Controller.java - Service.java - DAO.java - Mapper.xml

1)구조에서 DAO.java인터페이스와 클래스의 결합된 형태이다.

 

2) Controller.java - Service.java - Mapper.java - Mapper.xml 

2)의 구조에서 Mapper.java단순 인터페이스이다.

 

 

1. DAO란?

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

2. Mapper인터페이스란?

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

 

Mapper인터페이스를 사용하지 않을 경우

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

 


# Code

Mapper 코드

위 사진에서 MemberMapper(인터페이스)가 Mapper.java에 해당된다고 할 수 있다.

@Mapper
public interface MemberMapper {

    // 회원가입
    void save(@Param("id") String id, @Param("password") String password, @Param("name") String name);

    // 로그인  (=비밀번호 찾기)
    String findPassword(String id);

    // 회원정보 수정
    int  updateInfo(@Param("id") String id, @Param("password") String password, @Param("name") String name);

    // 회원 탈퇴
    int deleteUserInfo(@Param("id") String id);

    // 모든회원 조회
    List<Member> findAll();
}

위 사진에서 mpper.xml의 코드는 다음과 같다.

<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
        
<mapper namespace="com.flab.foodeats.mapper.MemberMapper">

    <!-- 회원가입  -->
    <insert id="save" parameterType="String">
        INSERT
        INTO Login_User_Data
        VALUES(#{id}, #{password}, #{name});
    </insert>


    <!-- 로그인 / 비밀번호 반환  -->
    <select id="findPassword" parameterType="String" resultType="String">
        SELECT password
        FROM Login_User_Data
        WHERE id = #{id};
    </select>


    <!-- 회원정보 수정 -->
    <update id="updateInfo" parameterType="String">
        UPDATE Login_User_Data
        SET password=#{password}, name = #{name}
        WHERE id = #{id};
    </update>


    <!-- 회원정보 탈퇴 -->
    <delete id = "deleteUserInfo" parameterType="String">
        DELETE
        FROM Login_User_Data
        WHERE id = #{id};
    </delete>

</mapper>

DAO 코드

DAO 코드는 따로 작성하지 않아 타 블로그를 참조하여 설명하겠습니다.

DAO 특징 

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

 

 

Reference

https://twofootdog.github.io/Spring-DAO%EC%99%80-Mapper%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90/   

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함