JSP_3강_2_★★★Emp 테이블_DAO(Data Access Object)★★★_전체 사원 목록

열라뽕따히·2024년 3월 15일

JSP

목록 보기
15/43

DAO(Data Access Object)

  • 데이터 접근 객체 ==> DB에 접속(연동)하는 객체
  • DAO란 데이터베이스에 접속해서 데이터를 추가, 수정, 삭제, 조회 등의 작업을 하는 클래스
  • 일반적으로 JSP 또는 Servlet에서 위의 작업들을 같이 사용할 수 있지만,
    중복 코드 발생 및 유지보수, 코드의 모듈화 등을 위해서 일반적으로 DAO 클래스를 따로 만들어서 사용함




main.jsp 생성


=============================코드=============================

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

		<div align = "center">
			<hr width = "30%" color = blue>
				<h3>EMP 테이블 메인 페이지</h3>
			<hr width = "30%" color = blue>
			<br/> <br/>
			
			<%-- request.getContextPath() : 현재 프로젝트명을 문자열로 반환해주는 메서드 --%>
																		<%-- select는 별칭 --%>
			<a href = "<%=request.getContextPath() %>/select">[전체 사원 목록]</a>
		
		</div>

</body>
</html>




Java Resources -> src/main/java -> com.emp.controller / com.emp.model 패키지 두 개 생성

com.emp.model 패키지에 EmpDTO, EmpDAO 클래스 두 개 생성


EmpDTO에 DB 상의 EMP 테이블의 컬럼명을 멤버변수로 선언


=============================코드=============================

package com.emp.model;

// DB 상의 EMP 테이블의 컬럼명과 유사하게 멤버 구성
public class EmpDTO {

		private int empno;
		private String ename;
		private String job;
		private int mgr;
		private String hiredate;
		private int sal;
		private int comm;
		private int deptno;
		
		
		public int getEmpno() {
			return empno;
		}
		
		public void setEmpno(int empno) {
			this.empno = empno;
		}
		
		public String getEname() {
			return ename;
		}
		
		public void setEname(String ename) {
			this.ename = ename;
		}
		
		public String getJob() {
			return job;
		}
		
		public void setJob(String job) {
			this.job = job;
		}
		
		public int getMgr() {
			return mgr;
		}
		
		public void setMgr(int mgr) {
			this.mgr = mgr;
		}
		
		public String getHiredate() {
			return hiredate;
		}
		
		public void setHiredate(String hiredate) {
			this.hiredate = hiredate;
		}
		
		public int getSal() {
			return sal;
		}
		
		public void setSal(int sal) {
			this.sal = sal;
		}
		
		public int getComm() {
			return comm;
		}
		
		public void setComm(int comm) {
			this.comm = comm;
		}
		
		public int getDeptno() {
			return deptno;
		}
		
		public void setDeptno(int deptno) {
			this.deptno = deptno;
		}
		
}



EmpDAO 클래스로 DB연동


=============================코드=============================

package com.emp.model;

import java.sql.*;

public class EmpDAO {
	
	// DB와 연동하는 객체
	Connection con = null;
	
	// DB에 SQL문을 전송하는 객체
	PreparedStatement pstmt = null;
	
	// SQL문을 실행한 후에 결과값을 가지고 있는 객체
	ResultSet rs = null;
	
	// SQL문을 저장할 문자열 변수
	String sql = null;
	
	public EmpDAO() {
		
		String driver = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "goott";
		String password = "99229922";
		
		// 1단계 : 오라클 드라이버를 메모리로 로딩
		try {
			Class.forName(driver);
			
			System.out.println("오라클 드라이버 메모리로 로딩 완료!");
            
        // 2단계 : 오라클 데이터베이스와 연결 작업 진행
		con = DriverManager.getConnection(url, user, password);
		System.out.println("오라클 데이터베이스와 연결 성공!");
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}  // 기본 생성자

}

데이터 연동 하기 위해서는 webapp -> WEB-INF -> lib에 ojdbc6.jar 복사 붙여넣기!



com.emp.controller에 /select 를 mapping 으로 준 서블릿 생성

service는 체크, doGet, doPost는 체크 풀기!


=============================코드=============================

package com.emp.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.emp.model.EmpDAO;


@WebServlet("/select")
public class SelectServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    
    public SelectServlet() {
        super();
        
    }

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// main.jsp 페이지에서 요청 내용
		// ==> EMP 테이블에 있는 전체 사원을 보여달라는 요청(비즈니스 로직)
		
	  // 1단계 : DB와 연결작업 진행
		EmpDAO dao = new EmpDAO();
        
      // 2단계 : DB에서 EMP 테이블의 전체 사원목록을 조회
		List<EmpDTO> empList = dao.selectEmpList();
		
	}

}

main.jsp에서 실행!

성공된 것을 확인했다면

EmpDAO.jsp로 가서 나머지 코드를 작성하자!


=============================코드=============================

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class EmpDAO {
	
	// DB와 연동하는 객체
	Connection con = null;
	
	// DB에 SQL문을 전송하는 객체
	PreparedStatement pstmt = null;
	
	// SQL문을 실행한 후에 결과값을 가지고 있는 객체
	ResultSet rs = null;
	
	// SQL문을 저장할 문자열 변수
	String sql = null;
	
	public EmpDAO() {
		
		String driver = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin:@localhost:1521:xe";
		String user = "goott";
		String password = "99229922";
		
		// 1단계 : 오라클 드라이버를 메모리로 로딩
		try {
			Class.forName(driver);
			
			System.out.println("오라클 드라이버 메모리로 로딩 완료!");
			
		// 2단계 : 오라클 데이터베이스와 연결 작업 진행
		con = DriverManager.getConnection(url, user, password);
		System.out.println("오라클 데이터베이스와 연결 성공!");
			
		} catch (Exception e) {
			
			e.printStackTrace();
		}
		
	}  // 기본 생성자
    
 //  ------------------ 여기서부터 작성--------------------
	
	// EMP 테이블에서 사원 전체 목록을 조회하는 메서드
	public List<EmpDTO> selectEmpList() {
		
		List<EmpDTO> list = new ArrayList<EmpDTO>();
		
		try {
			// 3단계 : 데이터베이스에 전송할 SQL문을 작성
			sql = "select * from emp order by hiredate desc";
			
			// 4단계 : SQL문을 데이터베이스 전송객체에 저장
			pstmt = con.prepareStatement(sql);
			
			// 5단계 : SQL문을 데이터베이스에 전송 및 실행
			rs = pstmt.executeQuery();  // 쿼리문을 전송하고 DB에서 실행
			
			while(rs.next()) {
				EmpDTO dto = new EmpDTO();
				
				dto.setEmpno(rs.getInt("empno"));
				dto.setEname(rs.getString("ename"));
				dto.setJob(rs.getString("job"));
				dto.setMgr(rs.getInt("mgr"));
				dto.setHiredate(rs.getString("hiredate"));
				dto.setSal(rs.getInt("sal"));
				dto.setComm(rs.getInt("comm"));
				dto.setDeptno(rs.getInt("deptno"));
				
				list.add(dto);  // dto는 주소값
			}
			
			// 6단계 : DB와 연결되어 있던 자원 종료
			rs.close();   pstmt.close();   con.close();
			
		} catch (SQLException e) {
			
			e.printStackTrace();
		}
		
		return list;
		
	}  // selectEmpList() 메서드 end

}



다시 서블릿으로 가자!


=============================코드=============================

package com.emp.controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.emp.model.EmpDAO;
import com.emp.model.EmpDTO;


@WebServlet("/select")
public class SelectServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    
    public SelectServlet() {
        super();
        
    }


	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// main.jsp 페이지에서 요청 내용
		// ==> EMP 테이블에 있는 전체 사원을 보여달라는 요청(비즈니스 로직)
		
		// 1단계 : DB와 연결작업 진행
		EmpDAO dao = new EmpDAO();
		
		// 2단계 : DB에서 EMP 테이블의 전체 사원목록을 조회
		List<EmpDTO> empList = dao.selectEmpList();
	
 // ----------------- 여기서부터 작성 --------------------
 -
		// 3단계 : 페이지 이동시 정보(데이터)를 넘겨 주어야 함
		request.setAttribute("List", empList);  // "Lsit"는 key , empLIst는 value 라고 생각하면 됨
		
		// 4단계 : 이동할 페이지 경로를 설정해주어야 함
		RequestDispatcher rd = request.getRequestDispatcher("view/emp_list.jsp");
		
		// 5단계 : 실제 페이지로 이동
		rd.forward(request, response);
		
	}

}



view 폴더 생성 -> emp_list.jsp 생성


=============================코드=============================

<%@page import="com.emp.model.EmpDTO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%

	List<EmpDTO> list = (List<EmpDTO>) request.getAttribute("List"); // empList의 값이 넘어옴

%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

		<div align = "center">
			<hr width = "30%" color = "red">
				<h3>EMP 테이블 전체 사원 리스트 페이지</h3>
			<hr width = "30%" color = "red">
			<br/> <br/>
			
			<table border = '1' width = "400">
				<tr>
					<th>사원 No.</th> <th>사원명</th> <th>부서No.</th> <th>입사일자</th>
				</tr>
				
				<%
					if(list.size() != 0) {  // 데이터가 있다면
						for(int i = 0; i < list.size(); i++){
							EmpDTO dto = list.get(i);
				%>
							<tr>
								<td> <%=dto.getEmpno() %> </td>
								<td> <%=dto.getEname() %> </td>
								<td> <%=dto.getDeptno() %> </td>
								<td> <%=dto.getHiredate().substring(0,10) %> </td>
							</tr>
							
				<% 		}   // for문 end
					}else {
						// 사원목록이 없는 경우
				%>
							<tr>
								<td colspan="4" align = "center">
								<h3>사원 전체 목록이 없습니다..</h3>
								</td>
							</tr>
				<% }
					
				%>
				
			</table>
		</div>

</body>
</html>

=============================실행=============================

전체 사원 목록 클릭

0개의 댓글