JSP Servlet 기초(13) DAO, DTO

이번엔 DAO와 DTO 에대해 알아보겠습니다

DAO : Data Access Object

DTO : Data Transfer Object


DAO란 데이터 베이스에 접속해서

데이터 추가, 삭제, 수정 등의 작업을

하는 클래스 입니다.


일반적인 JSP 혹은 Servlet 페이지 내에서

위의 로직들을 함께 쓸수 있지만

유지보수 및 코드의 모듈화를 위해

DAO 라는 클래스를 따로 만들어 사용합니다


DTO란 DAO클래스를 이용하여 데이터 베이스

에서 데이터를 관리할 때 데이터를 일반적인 변수에

저장하여 사용할수 있지만 해당 데이터의

클래스를 만들어 사용 합니다.



먼저 이클립스에서 파일을 만들어

실행 해보도록 하겠습니다


패키지에 MemberDAO.java, MemberDTO.java 클래스를

만들어줍니다

다음 WebContent에 memberView.jsp 만들어줍니다


DTO파일 먼저 입력해보겠습니다


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
package com.jsp.ex;
 
public class MemberDTO {
 
    private String name;
    private String id;
    private String pw;
    private String gender;
    
    public MemberDTO(String name, String id, String pw, String gender) {
        this.name = name;
        this.id = id;
        this.pw = pw;
        this.gender = gender;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    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 getGender() {
        return gender;
    }
 
    public void setGender(String gender) {
        this.gender = gender;
    }
    
}
 
cs


자바빈에서 처럼 변수를 선언하고

getter와 setter을 만들어줍니다


10linde 은 매개변수로 id, name, pw, gender 를 입력받으면

5~8line 에서 선언만 변수에 값을 저장해주는 겁니다

this.name 은 5line 에서 선언한 name을 타겟으로

잡습니다.


다음 DAO 보겠습니다


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
package com.jsp.ex;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
 
public class MemberDAO {
    private String url = "jdbc:oracle:thin:@localhost:1521:xe";
    private String uid = "scott";
    private String upw = "tiger";
    
    
    public MemberDAO() {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public ArrayList<MemberDTO> memberSelect() {
        
        ArrayList<MemberDTO> dtos = new ArrayList<MemberDTO>();
        
        Connection con =null;
        Statement stmt = null;
        ResultSet rs = null;
        
        try {
            con = DriverManager.getConnection(url, uid, upw);
            stmt = con.createStatement();
            rs = stmt.executeQuery("select * from member");
            
            while (rs.next()) {
                String name = rs.getString("name");
                String id = rs.getString("id");
                String pw = rs.getString("pw");
                String gender = rs.getString("gender");
                
                MemberDTO dto = new MemberDTO(name, id, pw, gender);
                dtos.add(dto);
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if(rs != null) rs.close();
                if(stmt != null) stmt.close();
                if(con != null) con.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        return dtos;
    }
 
}
 
cs

 

데이터베이스와 의 연결을 DAO 에서 해줍니다

23line 에서는 memberSelect() 메소드를 사용하면

ArrayList<MemberDTO> ArrayList로

반환해준다는 겁니다


25line 에서 dtos 를 선언하고 초기화 해줍니다

34line 에서부터는 select 문으로 member 테이블의

데이터들을 뽑아와 rs에 저장합니다

42line 에서는 뽑아온 데이터들을 위에서만든

MemberDTO 에name, id, pw, gender

데이터값을 보낸다음 dto에 담습니다

그리고 dto를 25line 에서 만든 dtos 에

add 를 사용하여 넣어줍니다.

그리고 58line 에서는 dtos 를 return 시켜줍니다

즉 23line에 메소드가 dtos 를 return 하는겁니다


다음

memberView.jsp 보겠습니다


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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="com.jsp.ex.MemberDTO"%>
<%@page import="java.util.ArrayList"%>
<%@page import="com.jsp.ex.MemberDAO"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
        MemberDAO memberDAO = new MemberDAO();
        ArrayList<MemberDTO> dtos = memberDAO.memberSelect();
        
        for(int i=0; i<dtos.size(); i++) {
            MemberDTO dto = dtos.get(i);
            String name = dto.getName();
            String id = dto.getId();
            String pw = dto.getPw();
            String gender = dto.getGender();
            
            out.println("이름 : " + name + ", 아이디 : " + id + ", 비밀번호 : " + pw + ", 성별 : " + gender + "<br />" );
        }        
   %>
</body>
</html>
cs


스크립트릿 안에 memberDAO 객체 생성후

15line 에서 dtos 안에 DAO안의 memberSelect()메소드를 넣어줍니다

즉 dtos 에 memberSelect() 메소드가 return 한 dtos 가 

들어가 지는겁니다


17line 에서 dtos 의 size 만큼 반복문을 돌리고

(dtos 는 ArrayList 형이기 때문에 size를 사용할수 있습니다)

dtos의 값을 dto 에 저장후 데이터베이스에서

뽑혀온 name, id, pw, gender 값을 다시 저장해줍니다

다음 값들을 화면에 출력해줍니다


 이제 jsp 를 실행시켜보면 데이터가 정상적으로

출력되는것을 확인할수 있습니다



댓글

Designed by JB FACTORY