Spring WEB

Spring MVC - DAO & Service + Mapper

엘호리스 2018. 8. 7. 18:46

DAO : Data Access Object

DB에 접근해 데이터 조회 또는 조작하는 기능을 담당할 오프젝트.


Service : 트랜잭션 단위의 DAO. 여러 DAO를 호출해야 하는 경우 Service에 구현한다.

(하지만 다음 예제에서는 DAO와 Service가 동일하다.)


* 공통 : implement 클래스를 구현할때 클래스명에 'impl'을 붙여주는데 '구현했다' 정도의 명명으로 보면 된다.


  • DAO 와 Service 구현 순서
  1. DAO 인터페이스 클래스 구현
  2. DAO implement 클래스 구현
  3. MyBatis Mapper.xml 설정
  4. Service 인터페이스 클래스 구현
  5. Service implement 클래스 구현

Request -> Controller -> Service(interface) -> ServiceImpl -> DAO(interface) -> DAOImpl -> Service -> View


1. DAO 인터페이스 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.example.spring01.model.dao;
 
import java.util.List;
 
import com.example.spring01.model.dto.MemberDTO;
 
public interface MemberDAO {
    // 회원목록
    public List<MemberDTO> memberList();
    // 회원가입
    public void insertMember(MemberDTO dto);
    // 회원정보보기
    public MemberDTO viewMember(String userid);
    // 회원삭제
    public void deleteMember(String userid);
    // 회원정보수정
    public void updateMember(MemberDTO dto);
    // 로그인
    public boolean checkPw(String userid, String passwd);
}
cs


2. DAO implement 클래스 구현

여기서 눈여겨 봐야할 것은 @Repository 어노테이션이다. 현재 DAO 클래스를 스프링이 관리하는 DAO BEAN으로 설정한다.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package com.example.spring01.model.dao;
 
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import javax.inject.Inject;
 
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;
 
import com.example.spring01.model.dto.MemberDTO;
 
//현재 클래스를 스프링에서 관리하는 dao bean으로 설정
@Repository
public class MemberDAOImpl implements MemberDAO {
    //mybatis의 SqlSession 객체를 스프링에서 주입시킴
    //의존관계 주입 느슨한 결합, 제어의 역전
    //@Inject 어노테이션이 있어 sqlSession은 null상태가 아닌 외부에서 객체를 주입받는 형태가 된다.
    @Inject
    SqlSession sqlSession;
    // 회원 목록
    @Override
    public List<MemberDTO> memberList() {
        return sqlSession.selectList("member.memberList");
    }
    // 회원 가입
    @Override
    public void insertMember(MemberDTO dto) {
        //auto commit, auto close        
        sqlSession.insert("member.insertMember", dto);
    }
    // 회원 정보 상세 보기
    @Override
    public MemberDTO viewMember(String userid) { 
        // 레코드 1개 : selectOne(), 2개 이상 : selectList()        
        return sqlSession.selectOne("member.viewMember", userid);
    }
    // 회원 삭제 하기
    @Override
    public void deleteMember(String userid) {
        sqlSession.delete("member.deleteMember", userid); 
    }
    // 회원 정보 수정
    @Override
    public void updateMember(MemberDTO dto) {
        sqlSession.update("member.updateMember", dto); 
    }
    // 로그인 체크
    @Override
    public boolean checkPw(String userid, String passwd) {
        boolean result=false;
        //mapper에 2개 이상의 자료를 전달할 때 : map, dto 사용
        Map<String,String> map=new HashMap<>();
        map.put("userid", userid);
        map.put("passwd", passwd);
        int count=sqlSession.selectOne("member.checkPw", map);
        //비번이 맞으면 1=>true, 틀리면 0=>false 리턴
        if(count==1) result=true;
        return result;
    }
 
}
cs



3. MyBatis Mapper 설정

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
32
33
34
35
36
37
38
39
40
<?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와 중복되지 않도록 네임스페이스 기재 -->
<mapper namespace="member">
    <!--  회원 목록 가져오기 -->
    <select id="memberList"
        resultType="com.example.spring01.model.dto.MemberDTO">
        select userid,passwd,name,email from member
        order by name
    </select>
    <!--  회원 가입  -->
    <insert id="insertMember">
        insert into member (userid,passwd,name,email) values
        (#{userid}, #{passwd}, #{name}, #{email} )
    </insert>
    <!-- 회원 정보 상세 보기  -->
    <select id="viewMember" resultType="memberDto">
        select * from member
        where userid=#{userid}
    </select>
    <!--  회원 정보 수정  -->
    <update id="updateMember">
        update member
        set passwd=#{passwd}, name=#{name}, email=#{email}
        where userid=#{userid}        
    </update>
    <!-- 비밀번호 체크  -->
    <select id="checkPw" resultType="int">
        select count(*) from member
        where userid=#{userid} and passwd=#{passwd}
    </select>
    <!--  회원 삭제  -->
    <delete id="deleteMember">
        delete from member
        where userid=#{userid}
    </delete>
    
</mapper>
cs



4. Service interface 클래스 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package com.example.spring01.service;
 
import java.util.List;
 
import com.example.spring01.model.dto.MemberDTO;
 
public interface MemberService {
    public List<MemberDTO> memberList();
    public void insertMember(MemberDTO dto);
    public MemberDTO viewMember(String userid);
    public void deleteMember(String userid);
    public void updateMember(MemberDTO dto);
    public boolean checkPw(String userid, String passwd);
}
cs



5. Service implement 클래스 구현

마찬가지로 @Service 어노테이션을 정의해 스프링에서 관리하는 service bean으로 설정한다.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package com.example.spring01.service;
 
import java.util.List;
 
import javax.inject.Inject;
 
import org.springframework.stereotype.Service;
 
import com.example.spring01.model.dao.MemberDAO;
import com.example.spring01.model.dto.MemberDTO;
 
//현재 클래스를 스프링에서 관리하는 service bean으로 설정
@Service
public class MemberServiceImpl implements MemberService {
    //dao 인스턴스를 주입시킴
    @Inject
    MemberDAO memberDao;
    // 회원 목
    @Override
    public List<MemberDTO> memberList() {
        return memberDao.memberList();
    }
    // 회원 가입
    @Override
    public void insertMember(MemberDTO dto) {
        memberDao.insertMember(dto);
    }
    // 회원 상세보기
    @Override
    public MemberDTO viewMember(String userid) {
        return memberDao.viewMember(userid);
    }
    // 회원 삭제
    @Override
    public void deleteMember(String userid) {
        memberDao.deleteMember(userid); 
    }
    // 회원 정보 수정
    @Override
    public void updateMember(MemberDTO dto) {
        memberDao.updateMember(dto); 
    }
    // 로그인
    @Override
    public boolean checkPw(String userid, String passwd) {
        return memberDao.checkPw(userid, passwd); 
    }
}
cs



'Spring WEB' 카테고리의 다른 글

Spring MVC - 게시판 만들기 feat.입문편  (1) 2018.08.10
Spring MVC - View / JSP  (0) 2018.08.07
Spring MVC DTO / VO  (0) 2018.08.07
Spring MVC Controller  (0) 2018.08.06
Spring WEB - DB 연결과 Test  (0) 2018.08.05