DAO : Data Access Object
DB에 접근해 데이터 조회 또는 조작하는 기능을 담당할 오프젝트.
Service : 트랜잭션 단위의 DAO. 여러 DAO를 호출해야 하는 경우 Service에 구현한다.
(하지만 다음 예제에서는 DAO와 Service가 동일하다.)
* 공통 : implement 클래스를 구현할때 클래스명에 'impl'을 붙여주는데 '구현했다' 정도의 명명으로 보면 된다.
- DAO 와 Service 구현 순서
- DAO 인터페이스 클래스 구현
- DAO implement 클래스 구현
- MyBatis Mapper.xml 설정
- Service 인터페이스 클래스 구현
- 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 |
'Certification > Spring(2V0-72.22, SCP)' 카테고리의 다른 글
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 |