20211020 32단계_jsp_java_DTO_DAO_list처리
32단계_jsp_java_DTO_DAO_list처리
DTO (Data Transfer Object) : 계층간 데이터 교환을 위한 자바빈즈를 뜻한다.
로직을 가지고 있지 않은 순수한 데이터 객체이며,
객체의 속성과 그 속성에 접근을 위한 getter 및 setter 메서드 만을 가지고 있다.
DAO (Data Access Object) : 데이터베이스의 데이터에 접근하기 위해 생성하는 객체DB에 접속하여 CRUD 작업을 시행하는 클래스. 드라이버 로딩 및 에러처리에 관한 구문이 담겨있다.
(출처 : https://iri-kang.tistory.com/5)
mdao 주소를 찾아서 mAllSelect 를 실행하여 오른쪽의 ArrayList<Member> 타입의 클래스를 실행한다.
Arraylist타입의 멤버 클래스를 alm 주소에 담는다. 빈 객체가 있는 alm이 생성된다.
while 문을 실행하여 셀렉트 쿼리를 실행한 값이 담겨있는 resultset 주소를 찾아가서 next 메서드를 실행한다.
rs를 찾아가서 m_id를 dbid 에 셋팅한다. m 주소에 member 아이디에 dbid를 셋팅한다.
alm 주소값을 찾아가서 add 메서드를 실행하고 m 의 주소값을 인덱스 0번에 추가한다.
return alm : arrayList 전체의 주소를 리턴한다.
ArrayList 정리
ArrayList : 크기가 가변적이다.
a0 | a1 | a2 |
현재 size = 2, 용량 = 3
선언방법 :
ArrayLIst<String> list = new ArrayList<String>();
으로 되어 있다면 String 타입만 추가될 수 있다. 다른 타입의 객체는 사용이 불가능 하다. Type mismatch 에러가 발생.
예시 >
ArrayLIst<Member> alm= new ArrayList<Member>();
- Member 클래스 데이터 타입만 추가가 가능하다.
ArrayLIst<Member> alm= new ArrayList<Member>(10);
- 객체의 초기용량을 설정이 가능하다.
Arraylist 값 추가 :
ArrayLIst<Member> alm= new ArrayList<Member>();
alm.add(3); - 값 추가
alm.add(3,10); - 3번째 index에 10을 삽입한다.
ArrayList 값 제거 :
ArrayLIst alm= new ArrayList();
alm.remove(3); - 3번째 인덱스를 제거한다.
alm.clear(); - 모든 값을 제거한다.
ArrayList 의 크기 구하기:
System.out.println(alm.size());
ArrayList의 값 출력하기 :
for 문을 이용하여 배열을 풀고 각 주소에 담긴 값에 접근한다.
(출처 : https://coding-factory.tistory.com/551)
Member.java (DTO)
package kr.or.ksmart.dto;
public class Member {
private String m_id;
private String m_pw;
private String m_level;
private String m_name;
private String m_email;
public String getM_id() {
return m_id;
}
public void setM_id(String m_id) {
System.out.println(m_id + "<- m_id setM_id Member.java");
this.m_id = m_id;
}
이하 생략
Mdao.java
//5 전체회원조회 메서드 선언
public ArrayList<Member> mAllSelect() throws ClassNotFoundException, SQLException{
System.out.println("05 mAllSelect Mdao.java");
DriverDB db = new DriverDB();
conn = db.driverDbcon();
System.out.println(conn + "<- conn ");
pstmt = conn.prepareStatement("select * from tb_member");
System.out.println(pstmt + "<-- pstmt");
rs = pstmt.executeQuery();
System.out.println(rs+ "<-- rs mAllSelect Mdao.java");
alm = new ArrayList<Member>();
System.out.println(alm + "<- alm mAllSelect Mdao.java");
while(rs.next()) {
m = new Member();
System.out.println(m+"<-- m mAllSelect Mdao.java");
m.setM_id(rs.getString("m_id"));
m.setM_pw(rs.getString("m_pw"));
m.setM_level(rs.getString("m_level"));
m.setM_name(rs.getString("m_name"));
m.setM_email(rs.getString("m_email"));
alm.add(m);
}
System.out.println(alm+"<---- alm 입니다.");
pstmt.close();
rs.close();
conn.close();
return alm;
}
Mdao_mAllSelect.jsp
<%@page import = "kr.or.ksmart.dao.Mdao" %>
<%@page import = "kr.or.ksmart.dto.Member" %>
<%@page import = "java.util.ArrayList" %>
<%
Mdao mdao = new Mdao();
ArrayList<Member> result = mdao.mAllSelect();
System.out.println(result +"<-result");
for(int i=0;i<result.size();i++){
Member m = result.get(i);
System.out.println(m + "<- m get("+i+")");
System.out.println(m.getM_id() + "<- m get("+i+").getM_id()");
System.out.println(m.getM_pw() + "<- m get("+i+").getM_pw()");
System.out.println(m.getM_level() + "<- m get("+i+").getM_level()");
System.out.println(m.getM_name() + "<- m get("+i+").getM_name()");
System.out.println(m.getM_email() + "<- m get("+i+").getM_email()");
}
%>
1) mdao.mAllSelect();
mdao 의 mAllSelect 메서드를 호출한다.
2) Mdao.java 의 System.out.println("05 mAllSelect Mdao.java");
를 콘솔에 출력된다.
3) 드라이버 로딩 ~
4) alm = new ArrayList<Member>();
[]<- alm mAllSelect Mdao.java <- Member 데이터타입만 담을 수 있는 빈 객체가 생성되었다.
5) while문으로 회원정보의 db를 한 줄씩 실행한다.
kr.or.ksmart.dto.Member@2524ad0c<-- m mAllSelect Mdao.java <- m의 주소값
m 은 한 행을 실행하고 다음 while 문을 실행할 때 마다 새로 생성된다.
각 db의 행을 가져와서 m의 데이터영역에 셋팅한다.
Member 클래스를 통해 생성된 객체 내부에는 아래와 같은 값이 담겨있으며
rs.next() 문을 실행하여 rs에 담긴 행만큼 객체를 생성하였다.
주소 : kr.or.ksmart.dto.Member@121953a1
id : id001 pw : pw001 name : ~~ |
주소 : kr.or.ksmart.dto.Member@492ce569
id : id00 pw : pw002 name : ~~ |
..
6) 위의 데이터가 담긴 주소를 alm 객체에 add 한다.
alm을 콘솔로 보면 아래와 같다.
[kr.or.ksmart.dto.Member@121953a1,
kr.or.ksmart.dto.Member@492ce569,
kr.or.ksmart.dto.Member@73534095,
kr.or.ksmart.dto.Member@492bff1b,
kr.or.ksmart.dto.Member@11f729c4]
mAllSelect() 메서드를 실행한 곳으로 alm 을 리턴한다.
7) Mdao_mAllSelect.jsp
ArrayList<Member> result = mdao.mAllSelect();
result 에 alm의 값을 담는다.
[kr.or.ksmart.dto.Member@121953a1,
kr.or.ksmart.dto.Member@492ce569,
kr.or.ksmart.dto.Member@73534095,
kr.or.ksmart.dto.Member@492bff1b,
kr.or.ksmart.dto.Member@11f729c4] <- result
8)
result.size(); -> 4 이다.
배열을 풀어 0번째 인덱스의 kr.or.ksmart.dto.Member@121953a1 객체를 가져와서
id : id001 pw : pw001 name : ~~ |
위의 데이터를 겟팅한다. 반복.