멋쟁이v의 개발일지

[JSP] DTO_DAO list/검색 처리 본문

0년차/JAVA

[JSP] DTO_DAO list/검색 처리

멋쟁이v 2023. 6. 18. 22:02
728x90
320x100

[목차]


01. List 컬렉션

💡
객체를 인덱스로 관리하기 때문에 객체를 저장하면 인덱스가 부여되고 인덱스로 객체를 검색, 삭제할 수 있는 기능을 제공
  • 기능

  • ArrayList
    👉🏻
    ➡️ ArrayList에 객체를 주가하면 내부 배열에 객체가 저장되고 제한 없이 객체를 추가할 수 있음.

    ➡️ 객체의 번지를 저장. 동일한 객체를 중복 저장 시 동일한 번지가 저장. null 저장 가능.

    ➡️ ArrayList 컬렉션에 객체를 추가 시 인덱스 0번부터 차례대로 저장.

    ➡️ 특정 인덱스의 객체를 제거하거나 삽입하면 전체가 앞/뒤로 1씩 당겨지거나 밀림.

    ➡️ 빈번한 객체 삭제와 삽입이 일어나는 곳에선 바람직하지 않음.

  • Vector
    👉🏻
    ➡️ 동기화된 메소드로 구성되어 있어 멀티 스레드가 동시가 Vector() 메소드를 실행할 수 없음.

    ➡️ 멀티 스레드 환경에서는 안전하게 객체를 추가 또는 삭제할 수 있음.

  • LinkedList
    👉🏻
    ➡️ 인접 객체를 체인처럼 연결해서 관리.

    ➡️ 객체 삭제와 삽입이 빈번한 곳에서 ArrayList보다 유리

02. DTO_DAO list 처리

💡
1️⃣ DAO 클래스에 select 쿼리 메서드를 생성한다.

2️⃣ ArrayList 객체를 생성하고 주소값을 객체참조변수에 할당한다.

3️⃣ DTO로 객체를 셋팅 하고 그 주소값을 ArrayList 객체에 add한다.

4️⃣ JSP에서 DAO 객체 생성 후 메서드를 호출한다.

5️⃣ ArrayList객체 주소값을 리턴 받고 ArrayList에 있는 각각 주소를 찾아가서 꺼내온다.

6️⃣ ArrayList에서 꺼내온 주소에서 셋팅된 값들을 겟팅해서 화면에 뿌려준다.

  • [코드예제] Udao.java
    package kr.or.dao;
    
    import kr.or.driverdb.DriverDB;
    import kr.or.dto.User;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    
    public class Udao {
        // 전역에 각각 데이터타입의 객체참조변수를 선언
        User u = null;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        ArrayList<User> alu = null;
    
        // 6. 리스트화면 처리 메서드 (ArrayList<User> 데이터 타입)
        public ArrayList<User> uAllSelect() throws SQLException, ClassNotFoundException {
            System.out.println("uAllSelect 메서드 Udao.java");
            alu = new ArrayList<User>();
    
            // 1-2단계 드라이버 실행, DB연결
            DriverDB db = new DriverDB();
            conn = db.driverDbcon();
            System.out.println(conn + "<- conn Udao.java");
    
            // 3단계 쿼리 실행 준비
            pstmt = conn.prepareStatement("SELECT * from tb_user");
            System.out.println(pstmt + "<- pstmt");
    
            // 4단계 쿼리 실행
            rs = pstmt.executeQuery();
    
            // 5단계 쿼리 실행 결과 사용
            while(rs.next()) {
                System.out.println("while 반복문 uAllSelect Udao.java");
                u = new User();
    
                // while문 통해서 u에 담긴 객체 주소를 확인
                System.out.println(u + "<-- u uAllSelect Udao.java");
    
                u.setU_id(rs.getString("u_id"));
                u.setU_pw(rs.getString("u_pw"));
                u.setU_level(rs.getString("u_level"));
                u.setU_name(rs.getString("u_name"));
                u.setU_email(rs.getString("u_email"));
                u.setU_phone(rs.getString("u_phone"));
                u.setU_addr(rs.getString("u_addr"));
    
                // ArrayList에 셋팅된 객체 주소를 추가
                alu.add(u);
            }
    
            // 6단계 쿼리 종료
            pstmt.close();
            rs.close();;
    
            // 7단계 DB연결 종료
            conn.close();
    
            return alu;
        }
    }

  • [코드예제] user_list.jsp
    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <!DOCTYPE html>
    
    <%@ page import="kr.or.dao.Udao" %>
    <%@ page import="java.util.ArrayList" %>
    <%@ page import="kr.or.dto.User" %>
    
    회원리스트 <br/>
    <table width="100%" border="2">
    	<tr>
    		<td>아이디</td>
    		<td>비밀번호</td>
    		<td>권한</td>
    		<td>이름</td>
    		<td>이메일</td>
    		<td>전화번호</td>
    		<td>주소</td>
    		<td>수정</td>
    		<td>삭제</td>
    	</tr>
    	
    <%
      // 객체 생성 후 메서드 호출
    	Udao udao = new Udao();
    	ArrayList<User> alu = udao.uAllSelect(); // 리턴값 사용
    
      // 화면에 뿌려주는 방법(for문 사용)
    	for(int i=0; i<alu.size(); i++) {
    		User u = alu.get(i);
    %>
    	<tr>
    		<td><%= u.getU_id() %></td>
    		<td><%= u.getU_pw() %></td>
    		<td><%= u.getU_level() %></td>
    		<td><%= u.getU_name() %></td>
    		<td><%= u.getU_email() %></td>
    		<td><%= u.getU_phone() %></td>
    		<td><%= u.getU_addr() %></td>
    		<td><a href="<%=request.getContextPath()%>/userupdate/user_update_form.jsp?send_id=<%=u.getU_id()%>">수정버튼</a></td>
    		<td><a href="<%=request.getContextPath()%>/userdelete/user_delete_action.jsp?send_id=<%=u.getU_id()%>">삭제버튼</a></td>
    	</tr>
    <%
    	}
    %>
    	
    </table>

03. DTO_DAO 검색 처리

💡
1️⃣ DAO 클래스에 select 쿼리 메서드를 생성한다.

2️⃣ ArrayList 객체를 생성하고 주소값을 객체참조변수에 할당한다.

3️⃣ 조건문을 활용해서 검색 조건에 따라 쿼리 실행 준비를 한다.

4️⃣ DTO로 객체를 셋팅 하고 그 주소값을 ArrayList 객체에 add한다.

5️⃣ JSP에서 DAO 객체 생성 후 메서드를 호출한다.

6️⃣ ArrayList객체 주소값을 리턴 받고 ArrayList에 있는 각각 주소를 찾아가서 꺼내온다.

7️⃣ ArrayList에서 꺼내온 주소에서 셋팅된 값들을 겟팅해서 화면에 뿌려준다.

  • [코드예제] Udao.java
    package kr.or.dao;
    
    import kr.or.driverdb.DriverDB;
    import kr.or.dto.User;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    
    public class Udao {
        // 전역에 각각 데이터타입의 객체참조변수를 선언
        User u = null;
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        ArrayList<User> alu = null;
    
        // 7. 검색화면 처리 메서드
        public ArrayList<User> uSearch(String sk, String sv) throws SQLException, ClassNotFoundException {
            System.out.println("uSearch 메서드 Udao.java");
            alu = new ArrayList<User>();
    
            // 1-2단계 드라이버 실행, DB연결
            DriverDB db = new DriverDB();
            conn = db.driverDbcon();
            System.out.println(conn + "<- conn Udao.java");
    
            // 3단계 쿼리 실행 준비
            String selectQuery = "SELECT * from tb_user";
            if((sk == null && sv == null) || (sk != null && sv.equals(""))) {
                pstmt = conn.prepareStatement(selectQuery);
            } else {
                pstmt = conn.prepareStatement(selectQuery + " where " + sk + "=?");
                pstmt.setString(1, sv);
            }
    
            System.out.println(pstmt + "<- pstmt");
    
            // 4단계 쿼리 실행
            rs = pstmt.executeQuery();
    
            // 5단계 쿼리 실행 결과 사용
            while(rs.next()) {
                u = new User();
                u.setU_id(rs.getString("u_id"));
                u.setU_pw(rs.getString("u_pw"));
                u.setU_level(rs.getString("u_level"));
                u.setU_name(rs.getString("u_name"));
                u.setU_email(rs.getString("u_email"));
                u.setU_phone(rs.getString("u_phone"));
                u.setU_addr(rs.getString("u_addr"));
    
                // ArrayList에 셋팅된 객체 주소를 추가
                alu.add(u);
            }
    
            // 6단계 쿼리 종료
            pstmt.close();
            rs.close();;
    
            // 7단계 DB연결 종료
            conn.close();
    
            return alu;
        }
    }

  • [코드예제] user_search_list.jsp
    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
    <!DOCTYPE html>
    
    <html>
    <head>
    <meta charset="EUC-KR">
    <title>Insert title here</title>
    <link rel="stylesheet" type="text/css" href="<%= request.getContextPath() %>/css/main.css" />
    </head>
    
    <body>
    
    <%@ include file="/module/top.jsp" %>
    <%@ include file="/module/left.jsp" %>
    
    <%@ page import="kr.or.dao.Udao" %>
    <%@ page import="java.util.ArrayList" %>
    <%@ page import="kr.or.dto.User" %>
    
    <%@ include file="/usersearch/user_search_form.jsp" %> <br/>
    
    <table width="100%" border="1">
    	<tr>
    		<td>아이디</td>
    		<td>비번</td>
    		<td>권한</td>
    		<td>이름</td>
    		<td>이메일</td>
    		<td>전화번호</td>
    		<td>주소</td>
    		<td>수정</td>
    		<td>삭제</td>
    	</tr>
    <%
    	// form에서 sk, sv 값을 post방식으로 가져온다.
    	request.setCharacterEncoding("euc-kr");
    	String sk = request.getParameter("sk");
    	String sv = request.getParameter("sv");
    	System.out.println(sk + "<- sk");
    	System.out.println(sv + "<- sv");
    
    	// 객체 생성 후 메서드 호출
    	Udao udao = new Udao();
    	ArrayList<User> alu = udao.uSearch(sk, sv); // 리턴값 변수에 저장
    
    	// 화면에 출력하는 방법
    	for(int i = 0; i<alu.size(); i++) {
    		User u = alu.get(i);
    %>
    	<tr>
    		<td><%= u.getU_id() %></td>
    		<td><%= u.getU_pw() %></td>
    		<td><%= u.getU_level() %></td>
    		<td><%= u.getU_name() %></td>
    		<td><%= u.getU_email() %></td>
    		<td><%= u.getU_phone() %></td>
    		<td><%= u.getU_addr() %></td>
    		<td><a href="<%=request.getContextPath()%>/userupdate/user_update_form.jsp?send_id=<%=u.getU_id()%>">수정버튼</a></td>
    		<td><a href="<%=request.getContextPath()%>/userdelete/user_delete_action.jsp?send_id=<%=u.getU_id()%>">삭제버튼</a></td>
    	</tr>
    <%
    	}
    %>
    </table>
    
    
    <%@ include file="/module/hadan.jsp" %>
       
    </body>
    </html>


tag : #jsp #java #select #쿼리 #DTO #DAO #ArrayList #List


Uploaded by N2T

728x90
320x100
Comments