티스토리 뷰
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/
'질문 & 답변' 카테고리의 다른 글
트러블 슈팅 (feat. Eureka AWS 배포하기) (0) | 2021.10.08 |
---|---|
Agile pull requests (feat. PR관리방법) (0) | 2021.08.01 |
"@Retention @Target "은 어떤 역할을 할까? (feat. 커스텀 어노테이션 인터셉터에 적용하기) (0) | 2021.07.11 |
"DAO / Repository" 의 차이는 무엇일까? (0) | 2021.07.08 |
"AOP / 필터 / 인터셉터"는 어떤 차이가 있을 (0) | 2021.07.08 |
댓글