JSP_3강_3_★★★DAO(Data Access Object)_사원 등록★★★

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

JSP

목록 보기
16/43

JSP_3강_2를 그대로 활용하여 HTML에서 수정과 삭제, 데이터와 연동되어 조회할 수 있도록 코드를 작성해보자!!


  1. 값을 주고 받을 클래스 만들기!
    com.emp.model 패키지에 DeptDTO class 생성

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

package com.emp.model;

public class DeptDTO {
	
	private int deptno;
	private String dname;
	private String loc;
	
	
	public int getDeptno() {
		return deptno;
	}
	
	public void setDeptno(int deptno) {
		this.deptno = deptno;
	}
	
	public String getDname() {
		return dname;
	}
	
	public void setDname(String dname) {
		this.dname = dname;
	}
	
	public String getLoc() {
		return loc;
	}
	
	public void setLoc(String loc) {
		this.loc = loc;
	}
	
}



insert가 별칭인 InsertServlet 서블릿 생성!


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

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.DeptDTO;
import com.emp.model.EmpDAO;
import com.emp.model.EmpDTO;


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

	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 사원등록 폼 페이지로 넘어가기 전에 부서번호 리스트를 
		// DB에서 조회하여 사원 등록 폼 페이지로 해당 데이터를
		// 넘겨 주는 비지니스 로직
		
		EmpDAO dao = new EmpDAO();



EmpDAO에서 클래스에서
Dept 테이블의 전체 부서 리스트를 조회하는 메서드와
EMP 테이블에 관리자 사원 리스트를 조회하는 메서드
EMP 테이블에 담당업무 리스트를 조회하는 메서드
EMP 테이블에 사원을 등록하는 메서드를 만들자!


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

package com.emp.model;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
	
	// 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
	
// ----------------여기서부터 작성----------------
	// DEPT 테이블의 전체 부서 리스트를 조회하는 메서드
	public List<DeptDTO> getDeptList() {
		List<DeptDTO> list = new ArrayList<DeptDTO>();
		
		try {
			
		 // 3단계 : 데이터베이스에 전송할 SQL문 작성
			sql = "select * from dept order by deptno";
			
		 // 4단계 : SQL문을 데이터베이스 전송객체에 저장
			pstmt = con.prepareStatement(sql);
			
		 // 5단계 : SQL문을 데이터베이스에 전송 및 실행
			rs = pstmt.executeQuery();  // 쿼리문을 전송하고 DB에서 실행
			
			while(rs.next()) {
				DeptDTO dto = new DeptDTO();
				
				dto.setDeptno(rs.getInt("deptno"));
				dto.setDname(rs.getString("dname"));
				dto.setLoc(rs.getString("loc"));
				
				list.add(dto);
			}
			
			// 6단계 : DB와 연결되어 있던 자원 종료
			rs.close();  pstmt.close();  // con.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
					
		return list;
		
	} // getDeptList() 메서드 end
    
// EMP 테이블에서 관리자 사원 리스트를 조회 하는 메서드 
 public List<EmpDTO> getMgrList() {
		List<EmpDTO> list = new ArrayList<>();
		
		try {
			
			// 3단계 : 데이터베이스에 전송할 SQL문 작성
			sql = "select * from emp where empno in(select distinct(mgr) from emp)";
			
			// 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"));
				
				list.add(dto);
			}
			
			// 6단계 : DB와 연결되어 있던 자원 종료
			rs.close();  pstmt.close();  //con.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}

// EMP 테이블에서 담당업무 리스트를 조회하는 메서드
	public List<String> getJobList() {
		List<String> list = new ArrayList<>();
		
		try {
			sql = "select distinct(job) from emp";
			pstmt = con.prepareStatement(sql);
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				list.add(rs.getString("job"));
			}
			rs.close();   pstmt.close();  // con.close();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}
    
 // EMP 테이블에 사원을 등록하는 메서드
	public int insertEmp(EmpDTO dto) {
		int result = 0;  // 반환되는 값
		
		try {
			// 3단계 : 데이터베이스에 전송할 SQL문 작성
			sql = "insert into emp values(?, ?, ?, ?, sysdate, ?, ?, ?)";
			
			// 4단계 : SQL문을 데이터베이스 전송객체에 저장
			pstmt = con.prepareStatement(sql);
			
			// 4-1단계 : ?(플레이스 홀더)에 데이터를 저장
			pstmt.setInt(1, dto.getEmpno());
			pstmt.setString(2, dto.getEname());
			pstmt.setString(3, dto.getJob());
			pstmt.setInt(4, dto.getMgr());
			pstmt.setInt(5, dto.getSal());
			pstmt.setInt(6, dto.getComm());
			pstmt.setInt(7, dto.getDeptno());
			
			// 5단계 : SQL문을 DB에 전송 및 실행
			result = pstmt.executeUpdate();
			
			// 6단계 : DB와 연결되어 있던 자원 종료
			pstmt.close();   con.close();

		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return result;
	}  // insertEmp() 메서드 end
    



다시 InsertServlet 으로 가보자!


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

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.DeptDTO;
import com.emp.model.EmpDAO;
import com.emp.model.EmpDTO;


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

	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 사원등록 폼 페이지로 넘어가기 전에 부서번호 리스트를 
		// DB에서 조회하여 사원 등록 폼 페이지로 해당 데이터를
		// 넘겨 주는 비지니스 로직
		
		EmpDAO dao = new EmpDAO();
		
			// EMP 테이블에서 담당업무 리스트를 조회해 보자.
				List<String> jobList = dao.getJobList();
				
			// EMP 테이블에서 관리자 사원 리스트를 조회해 보자.
				List<EmpDTO> mgrList = dao.getMgrList();
				
			// DEPT 테이블에서 부서 전체 리스트를 조회해 보자.
				List<DeptDTO> deptList = dao.getDeptList();
				
			// 부서 전체 리스트를 부서등록 폼 페이지에 넘겨 주어야 한다.
				request.setAttribute("DeptList", deptList);
				request.setAttribute("JobList", jobList);
				request.setAttribute("MgrList", mgrList);
		
		
		// 페이지 이동 경로 설정
		RequestDispatcher rd = request.getRequestDispatcher("view/emp_insert.jsp");
		
		// 페이지 이동
		rd.forward(request, response);
	}

}



view 폴더 -> emp_insert.jsp 파일 생성


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

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

<%
										// 형변환이 필요함
	List<DeptDTO> dList = (List<DeptDTO>)request.getAttribute("DeptList");
	List<EmpDTO> mList = (List<EmpDTO>)request.getAttribute("MgrList");
	List<String> jList = (List<String>)request.getAttribute("JobList");
%>

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

		<div align = "center">
			<hr width = "30%" color = "gray">
				<h3>EMP 테이블 사원 등록 폼 페이지</h3>
			<hr width = "30%" color = "gray">
			<br/> <br/>
			
			<form method = "post" action = "<%=request.getContextPath() %>/insert_ok">
				<table border = "1" width = "350">
					<tr>
						<th>사원 No.</th>
						<td>
							<input type = "text" name = "num">
						</td>
					</tr>
					
					<tr>
						<th>사원 이름</th>
						<td>
							<input type = "text" name = "name">
						</td>
					</tr>
					
					<tr>
						<th>담당업무</th>
						<td>
							<select name = "job">
								<%
									if(jList.size() == 0){
								%>	
									<option value = "">:::직업:::</option>	
								<% } else {
										for(int i = 0; i < jList.size(); i++){
											String j = jList.get(i);
								%>	
									<option value = "<%=j %>"><%=j %></option>		
								<% 	}
								}
								%>
								
							</select>
						</td>
					</tr>
					
					<tr>
						<th>관리자 No.</th>
						<td>
							<select name = "mgrNo">
								<%
									if(mList.size() == 0){
										
								%>
									<option value = "">:::관리번호 없음:::</option>
								<% } else{
										for(int i =0; i < mList.size(); i++){
											EmpDTO mgr = mList.get(i);
								%>
									<option value = "<%=mgr.getEmpno() %>"><%=mgr.getEname() %></option>
								<% 	}
								} 
								%>
							</select>
						</td>
					</tr>
					
					<tr>
						<th>급 여</th>
						<td>
							<input type = "text" name = "sal">
						</td>
					</tr>
					
					<tr>
						<th>보너스</th>
						<td>
							<input type = "text" name = "comm">
						</td>
					</tr>
					
					<tr>
						<th>부서 No.</th>
						<td>
							<select name = "deptNo">
								<%
									if(dList.size() == 0){
										// 데이터가 없는 경우
								%>
									<option value = ""> :::부서번호 없음::: </option>
									
								<% } else {
									   // 데이터가 있는 경우
									   for(int i = 0; i <dList.size(); i++){
										   DeptDTO dto = dList.get(i);
								%>
									<option value = "<%=dto.getDeptno() %>">
										<%=dto.getDname() %> &nbsp;&nbsp; [<%=dto.getDeptno() %>]</option>
								<% 	   }
								}
								%>
							</select>
						</td>
					</tr>
					
					<tr>
						<td colspan = "2" align = "center">
							<input type = "submit" value = "사원등록"> &nbsp;&nbsp;&nbsp;
							<input type = "reset" value = "다시 작성">
						</td>
					</tr>
					
				</table>
			</form>
		
		</div>

</body>
</html>



사원등록 폼 페이지에서 넘어온 데이터들을 EMP 테이블에 저장시킬

insert_ok 서블릿을 만들자!


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

package com.emp.controller;

import java.io.IOException;
import java.io.PrintWriter;

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("/insert_ok")
public class InsertOkServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
  
    public InsertOkServlet() {
        super();
       
    }

	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 사원등록 폼 페이지에서 넘어온 데이터들을 
		// EMP 테이블에 저장시키는 비지니스 로직
		
		// 요청과 응답 시 한글이 깨짐을 방지하는 설정 작업
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset = UTF-8");
		
		// 1단계 : 사원등록 폼 페이지에서 넘어온 데이터들을 받아주어야 함
		int emp_no = Integer.parseInt(request.getParameter("num").trim());
		String emp_name = request.getParameter("name").trim();
		String emp_job = request.getParameter("job").trim();
		int emp_mgr = Integer.parseInt(request.getParameter("mgrNo").trim()) ;
		int emp_sal = Integer.parseInt(request.getParameter("sal").trim()) ;
		int emp_comm = Integer.parseInt(request.getParameter("comm").trim()) ;
		int emp_deptno = Integer.parseInt(request.getParameter("deptNo").trim()) ;
		
		// 2단계 : 넘어온 데이터들을 DB에 전송해 주어야 함. 전송 시 DTO 객체를 이용함
		EmpDTO dto = new EmpDTO();
		
		dto.setEmpno(emp_no);
		dto.setEname(emp_name);	
		dto.setJob(emp_job);
		dto.setMgr(emp_mgr);
		dto.setSal(emp_sal);
		dto.setComm(emp_comm);
		dto.setDeptno(emp_deptno);
		
		// 3단계 : DTO 객체를 DB에 전송하면 됨
		EmpDAO dao = new EmpDAO();
		
		int check = dao.insertEmp(dto);
		
		PrintWriter out = response.getWriter();
		
		if(check > 0) {
			out.println("<script>");
			out.println("alert('사원 등록 성공!')");
			out.println("location.href = 'select'");  // select 서블릿으로 다시 넘어감
			out.println("</script>");
		}else {
			out.println("<script>");
			out.println("alert('사원 등록 실패!')");
			out.println("histroy.back()");  // 이전 페이지로 돌아감
			out.println("</script>");
		}
	}

}



main.jsp로 가서 사원 추가가 되는지 다시 실행해보자!

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

사원등록 클릭!

등록 클릭!

전체 사원 리스트 페이지에 바로 넘어가며 추가된 것을 확인할 수 있음!

0개의 댓글