41기 개발자과정

20211020 32단계_jsp_java_DTO_DAO_list처리

segment 2021. 10. 23. 23:41

 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 : ~~ 

위의 데이터를 겟팅한다. 반복.