728x90
DAO(Data Access Object)
데이터베이스에 접근하는 역할을 하는 객체
데이터의 CRUD 작업을 시행하는 클래스
데이터베이스 작업
예시1)
package com.mystroy001.dao;
import javax.inject.Inject;
import javax.sql.DataSource;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import com.mystroy001.domain.MemberDTO;
public class MemberDAO {//DB 작업
//멤버변수 정의 javax.sql.DataSource
// private DataSource dataSource;
//스프링에서 디비연결 정보를 받아서 sql 문을 실행하는 프로그램 제공
private SimpleJdbcTemplate jdbcTemplate;
//set 메소드
@Inject
public void setDataSource(DataSource dataSource) {
// this.dataSource = dataSource;
jdbcTemplate = new SimpleJdbcTemplate(dataSource);
}
String sql = "insert into members(id,pw,name,date) values(?,?,?,?)";
public void insertMember(MemberDTO memberDTO) {
System.out.println("MemberDAO insertMember()");
jdbcTemplate.update(sql, memberDTO.getId(),memberDTO.getPw(),memberDTO.getName(),memberDTO.getDate());
}
}
예시2)
package com.mystory001.dao;
import java.util.List;
import javax.inject.Inject;
import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;
import com.mystory001.domain.MemberDTO;
@Repository
public class MemberDAO {
//마이바티스 멤버 변수 정의 → 객체 생성을 자동으로 전달(주입) 받음
@Inject
private SqlSession sqlSession;
//com.mystory001.mapper.memberMapper를 변수로 치환해서 사용
private static final String namespace = "com.mystory001.mappers.memberMapper";
// public void insertMember(MemberDTO memberDTO) {
// System.out.println("MemberDAO insertMember()");
//
// sqlSession.insert(namespace+"insertMember", memberDTO); //sql구문(전체파일이름.sql 구문이름, 값)
// }
public void insertMember(MemberDTO memberDTO) {
System.out.println("MemberDAO insertMember()");
sqlSession.insert(namespace+".insertMember", memberDTO);
}
public MemberDTO userCheck(MemberDTO memberDTO) {
System.out.println("MemberDAO userCheck()");
return sqlSession.selectOne(namespace+".userCheck", memberDTO);
//selectOne() : 리턴 결과가 1개
//selectList() : List형으로 리턴
//selectMap() : Map형으로 리턴
}
public MemberDTO getMember(String id) {
System.out.println("MemberDAO getMember()");
return sqlSession.selectOne(namespace+".getMember", id);
}
public void updateMember(MemberDTO memberDTO) {
System.out.println("MemberDAO updateMember()");
sqlSession.update(namespace+".updateMember", memberDTO);
}
public void deleteMember(MemberDTO memberDTO) {
System.out.println("MemberDAO deleteMember()");
sqlSession.delete(namespace+".deleteMember", memberDTO);
}
public List<MemberDTO> getMemberList() {
System.out.println("MemberDAO getMemberList()");
return sqlSession.selectList(namespace+".getMemberList");
}
}
DTO(Data Transfer Object)
데이터를 전달하기 위한 객체. 데이터 은닉과 캡슐화
멤버변수를 접근하지 못하게함
예시)
package com.mystroy001.domain;
import java.sql.Timestamp;
public class MemberDTO {
//데이터 은닉과 캡슐화
//멤버변수 변수를 아무나 접근 못하게 막아줌 => 데이터 은닉
private String id;
private String pw;
private String name;
private Timestamp date;
//데이터 접근을 위한 public 메소드 정의(getter, setter)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Timestamp getDate() {
return date;
}
public void setDate(Timestamp date) {
this.date = date;
}
}
※lombok을 이용하면 getter/setter를 사용하지 않아도 됨
Service
처리 작업
예시1)
package com.mystroy001.service;
import java.sql.Timestamp;
import javax.inject.Inject;
import com.mystroy001.dao.MemberDAO;
import com.mystroy001.domain.MemberDTO;
public class MemberService {//처리작업
//MemberDAO 객체 생성 → 멤버 변수
// MemberDAO memberDAO = new MemberDAO();
private MemberDAO memberDAO;
//set메소드 정의
@Inject
public void setMemberDAO(MemberDAO memberDAO) {
this.memberDAO = memberDAO;
}
public void insertMember(MemberDTO memberDTO) {
System.out.println("MemberService insertMember()");
//가입날짜 설정
memberDTO.setDate(new Timestamp(System.currentTimeMillis()));
System.out.println(memberDTO.getDate());
memberDAO.insertMember(memberDTO);
}
}
예시2)
package com.mystory001.service;
import java.sql.Timestamp;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import com.mystory001.dao.MemberDAO;
import com.mystory001.domain.MemberDTO;
@Service
public class MemberService {
//MemberDAO 객체생성 - 멤버변수
//@Inject - MemberDAO 클래스 찾기 - @Repsitory 애노테이션 찾기 - 자동으로 객체 생성
//servlet-context에 component-scan 추가
@Inject
private MemberDAO memberDAO;
public void insertMember(MemberDTO memberDTO) {
System.out.println("MemberService insertMember()");
memberDTO.setDate(new Timestamp(System.currentTimeMillis())); //가입날짜 설정
memberDAO.insertMember(memberDTO); //insertMember()메소드 호출
}
public MemberDTO userCheck(MemberDTO memberDTO) {
System.out.println("MemberService userCheck()");
//userCheck 메소드 호출
return memberDAO.userCheck(memberDTO);
}
public MemberDTO getMember(String id) {
System.out.println("MemberService getMember()");
return memberDAO.getMember(id);
}
public void updateMember(MemberDTO memberDTO) {
System.out.println("MemberService updateMember()");
memberDAO.updateMember(memberDTO);
}
public void deleteMember(MemberDTO memberDTO) {
System.out.println("MemberService deleteMember()");
memberDAO.deleteMember(memberDTO);
}
public List<MemberDTO> getMemberList() {
System.out.println("MemberService getMemberList()");
return memberDAO.getMemberList();
}
}
웹 동작 원리 정리
- 클라이언트가 정보를 요청
- 웹 브라우저가 DNS에게 특정 사이트의 주소를 요청
- DNS가 웹 브라우저에게 사이트의 IP주소를 응답
- 웹 브라우저가 웹 서버에게 IP 주소를 이용하여 html 문서를 요청
- 웹 애플리케이션 서버와 데이터 베이스에서 웹 페이지 작업을 처리
- 작업 처리 결과를 웹 서버로 보내줌
- 웹 서버는 웹 브라우저에 응답
- 웹 브라우저 화면에 웹 페이지를 출력
여기서 4~6번 과정을 스프링으로 나타내면
- Controller에서
DB 작업이 없으면 곧바로 요청한 주소를 리턴
DB 작업이 필요할 경우 Service에서 Controller의 DB 작업 - Service에서는 DAO 메소드 호출
- DAO에서는 mapper.xml db작업을 호출?
즉, 화면 → Controller → Service → DAO → mapper.xml순으로 데이터이동.
리턴해야하는 것이 있을 경우 예를 들어 아이디 찾기와 같은 정보를 대조하고 해당 정보가 있는 것이 있으면 정보를 보여줘야할 경우에는 Controller → Service → DAO → mapper.xml → DAO → Service → Controller → 화면 으로 데이터가 이동
728x90
'organize > 스프링' 카테고리의 다른 글
프레임워크, Spring과 Spring Boot (1) | 2024.10.04 |
---|---|
redirect, redirect와 RequestDispatcher (0) | 2024.10.03 |
페이지 처리 (0) | 2024.10.02 |
1. 개발을 위한 준비 (0) | 2024.08.27 |
spring(스프링) 프로젝트 생성 (0) | 2024.02.03 |