Java - DAO,DTO활용

2020. 6. 29. 23:05Java

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import java.util.ArrayList;
 
public class customerEx {
    //데이터베이스와 연동하여 회원정보를 관리하는 클래스 정의
    //현재 클래스에서는 데이터 준비 작업과 처리결과만 다루고
    //실제 데이터베이스와 연동하여 작업을 처리하는 것은 DAO 클래스를 통해 간접적 수행
    //또한 , DB작업에 필요한 데이터는 DTO 객체를 사용하여 관리
    public static void main(String[] args) {
        
        customerEx ex=new customerEx();
        //외부로부터 전달받은 데이터가 있다고 가정
        //이름,아이디,패스워드,주민번호를 전달받아 추가!
//        ex.customerInsert("전지현","jjh12","jjh123","870624-2131456");
        
        //아이디,기존 패스워드, 새 패스워드를 전달받아 수정
//        ex.customerUpdate("jjh12","jjh456","jjh123");
        
        //아이디와 패스워드를 전달받아 레코드 삭제
//        ex.customerDelete("jjh12","jjh123");
        
        //전체 레코드를 조회하여 출력
        ex.customerSelect();
        
        
        
        //DB작업을 수행하기 위해 DAO 클래스의 인스턴스 생성
//        CustomerDAO dao=new CustomerDAO();
//        dao.insert();
//        dao.update();
//        dao.delete();
//        dao.select();
        
    }
    
    public void customerInsert(String name,String id,String password,String jumin) {
        System.out.println("customerInsert() 시작");
        //외부로부터 전달받은 데이터를 사용하여 DAO객체에 전달 후 INSERT 작업 수행
        //DAO 객체에 전달할 데이터를 DTO 객체에 저장하여 전달
        
        CustomerDTO dto=new CustomerDTO(0,name,id,password,jumin);//idx 임시값 사용
        
//        CustomerDTO dto=new CustomerDTO();//생성자를 별도 지정하지않았을 경우 Setter 사용
//        dto.setIdx(0);
//        dto.setName(name);
//        dto.setId(id);
//        dto.setPassword(password);
//        dto.setJumin(jumin);
        
        //CustomerDAO 객체를 생성하여 insert() 메서드 호출
        //파라미터 : CustomerDTO 객체, 리턴타입 : int(insertCount)
        CustomerDAO dao=new CustomerDAO();
        int insertCount=dao.insert(dto);
        
        if(insertCount>0) {
            System.out.println("INSERT 성공");
        }else {
            System.out.println("INSERT 실패");
        }
        System.out.println("customerInsert() 끝");
    }
    public void customerUpdate(String id,String oldPassword,String newPassword) {
        //아이디와 기존 패스워드를 사용하여 회원 조회 후 일치하는 회원이 있으면 
        //전달받은 새 패스워드로 변경하는 UPDATE 작업 수행
        //1. DTO 객체 생성하여 아이디와 기존패스워드를 저장하고, 새 패스워드는 별도로 전달
        System.out.println("customerUpdate() 시작");
        
//        CustomerDTO dto=new CustomerDTO(0,null,id,oldPassword,null);
//        CustomerDAO dao=new CustomerDAO();
//        int updateCount=dao.update(dto, newPassword);
        
        //2.DTO 객체를 생성하지 않고, 아이디,기존패스워드,새 패스워드를 각각 전달
        CustomerDAO dao=new CustomerDAO();
        int updateCount=dao.update(id,oldPassword,newPassword);
        
        if(updateCount>0) {
            System.out.println("UPDATE 성공");
        }else {
            System.out.println("UPDATE 실패");
        }
        
        System.out.println("customerUpdate() 종료");
        
    }
    public void customerDelete(String id,String password) {
        
        System.out.println("customerDelete() 시작");
        //DTO 객체 생성하여 아이디, 패스워드 저장
        CustomerDTO dto=new CustomerDTO(0,null,id,password,null);
        
        
        //DAO 객체 생성하여 delete() 메서드 호출
        //파라미터 : CustomerDTO 객체, 리턴타입 : int deleteCont
        CustomerDAO dao=new CustomerDAO();
        int deleteCount=dao.delete(dto);
        
        
        //deleteCount 가 0보다 크면 "DELETE 성공" 아니면 "DELETE 실패"
        if(deleteCount>0) {
            System.out.println("DELETE 성공");
        }else {
            System.out.println("DELETE 실패");
        }
        
        
        System.out.println("customerDelete() 종료");
    }
    public void customerSelect() {
        //DAO 객체 생성하여 select() 메서드 호출
        //파라미터 : 없음, 리턴타입 : ArrayList
        //리턴되는 ArrayList 객체는 DTO 객체 여러개가 하나로 묶여서 저장된 객체
        //따라서 ArrayList 객체 내의 DTO 객체를 하나씩 꺼내 Getter 를 호출하여
        //한 개 레코드(한 명의 정보)씩 접근
        
        CustomerDAO dao=new CustomerDAO();
        ArrayList list=dao.select();
        
        //ArrayList 객체에 저장된 customerDTO 객체를 반복해서 꺼내기
        
//        for(int i =0;i<list.size();i++) {
//            //instanceof 연산자를 사용하여 형변환 가능여부 판별(생략가능)한 후
//            //CustomerDTO 타입으로 다운캐스팅하여 저장
//            CustomerDTO dto= (CustomerDTO) list.get(i);
//            
//        }
//        
        
        
        for(Object o : list) {//향상된 for문을 사용하는 방법
            CustomerDTO dto=(CustomerDTO)o;            
//            System.out.println(dto);
            
            //1개 레코드 내의 데이터를 각각의 변수에 꺼내서 저장 후 출력
            //프레젠테이션 로직!@#!@#!@#!@#@!
            int idx=dto.getIdx();
            String name=dto.getName();
            String id=dto.getId();
            String password=dto.getPassword();
            String jumin=dto.getJumin();
            
            System.out.println(idx+", "+name+", "+id+", "+password+", "+jumin);
            
            
        }
        
    }
 
}
 
cs

 

DAO와 DTO를 따로 모듈화를 시키고 이제 제어를 하기 위해 불러와서 작업하는 공간의 클래스를 만들어 보았다.

다른 클래스를 객체생성하여 불어와서 입력 후 끝이 나기 때문에 간단하게 작업하였지만 처음에 

DAO를 객체생성하여  DTO를 입력한다는 개념이 조금 생소해서 어렵게 느껴졌지만 4가지의 작업을 하다 보니 익숙해졌고 이해가 되었다. SELECT작업을 활용하여  list에 작업한 결과물들을 저장하여 화면에 표현하는 작업도 해보고 하니 

DAO작업을 할때 미리 어떤 정보를 파라미터 입력을 받을지 생각을 해서 작업을 해야 하고 어떤 값을 리턴해줄지도 미리 생각해보고 하니 확실히 개념들이 이해가 되었다.  DTO에서의 Getter/Setter을 활용하여 입력값들을 컨트롤해보니 전반적인 작업들의 로직이 이해가 되었지만 확실히 다잡고 넘어갈 필요성을 느꼈다. 

'Java' 카테고리의 다른 글

Java - StringBuilder & StringBuffer  (0) 2020.06.30
Java - Wrapper  (0) 2020.06.30
Java - DAO  (0) 2020.06.29
Java - DTO  (0) 2020.06.29
Java - JDBC-2  (0) 2020.06.29