TIL - 26. EMPLOYEE [230817]

송원철·2023년 8월 17일
0

Employee

package edu.kh.emp.model.vo;

// VO : 값 저장용 객체 (== DB 조회 결과 한 행을 저장)
public class Employee {
	private int empId;  // 사원 번호
	private String empName; // 이름
	private String empNo; // 주민등록번호
	private String email; 
	private String phone;
	private String departmentTitle; // 부서명
	private String jobName; // 직급명
	private int salary; // 급여
	
	private String deptCode; // 부서코드
	private String jobCode; // 직급코드
	private String salLevel; // 급여등급
	private double bonus; // 보너스
	private int managerId; // 사수번호
	

public Employee() {}


public Employee(int empId, String empName, String empNo, String email, String phone, String departmentTitle,
		String jobName, int salary) {
	super();
	this.empId = empId;
	this.empName = empName;
	this.empNo = empNo;
	this.email = email;
	this.phone = phone;
	this.departmentTitle = departmentTitle;
	this.jobName = jobName;
	this.salary = salary;
	
}


public Employee(int empId, String empName, String empNo, String email, String phone, int salary, String deptCode,
		String jobCode, String salLevel, double bonus, int managerId) {
	super();
	this.empId = empId;
	this.empName = empName;
	this.empNo = empNo;
	this.email = email;
	this.phone = phone;
	this.salary = salary;
	this.deptCode = deptCode;
	this.jobCode = jobCode;
	this.salLevel = salLevel;
	this.bonus = bonus;
	this.managerId = managerId;
}


public int getEmpId() {
	return empId;
}

public void setEmpId(int empId) {
	this.empId = empId;
}

public String getEmpName() {
	return empName;
}

public void setEmpName(String empName) {
	this.empName = empName;
}

public String getEmpNo() {
	return empNo;
}

public void setEmpNo(String empNo) {
	this.empNo = empNo;
}

public String getEmail() {
	return email;
}

public void setEmail(String email) {
	this.email = email;
}

public String getPhone() {
	return phone;
}

public void setPhone(String phone) {
	this.phone = phone;
}

public String getDepartmentTitle() {
	return departmentTitle;
}

public void setDepartmentTitle(String departmentTitle) {
	this.departmentTitle = departmentTitle;
}

public String getJobName() {
	return jobName;
}

public void setJobName(String jobName) {
	this.jobName = jobName;
}

public int getSalary() {
	return salary;
}

public void setSalary(int salary) {
	this.salary = salary;
}

public String getDeptCode() {
	return deptCode;
}

public void setDeptCode(String deptCode) {
	this.deptCode = deptCode;
}

public String getJobCode() {
	return jobCode;
}

public void setJobCode(String jobCode) {
	this.jobCode = jobCode;
}

public String getSalLevel() {
	return salLevel;
}

public void setSalLevel(String salLevel) {
	this.salLevel = salLevel;
}

public double getBonus() {
	return bonus;
}

public void setBonus(double bonus) {
	this.bonus = bonus;
}

public int getManagerId() {
	return managerId;
}

public void setManagerId(int managerId) {
	this.managerId = managerId;
}

@Override
public String toString() {
	return "Employee [empId=" + empId + ", empName=" + empName + ", empNo=" + empNo + ", email=" + email + ", phone="
			+ phone + ", departmentTitle=" + departmentTitle + ", jobName=" + jobName + ", salary=" + salary
			+ ", deptCode=" + deptCode + ", jobCode=" + jobCode + ", salLevel=" + salLevel + ", bonus=" + bonus
			+ ", managerId=" + managerId + "]";
	}


}

EmployeeView

package edu.kh.emp.view;

import java.util.InputMismatchException;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

import edu.kh.emp.model.service.EmployeeService;
import edu.kh.emp.model.vo.Employee;

// 화면용 클래스 
/**
 * 
 */
public class EmployeeView {

	private Scanner sc = new Scanner(System.in);
	
	// Service 객체 생성
	private EmployeeService service = new EmployeeService();
	
	// 메인메뉴
	public void displayMenu() {
		
		int input = 0;
		
		do {
			try {
				System.out.println("---------------------------------------------------------");
				System.out.println("----- 사원 관리 프로그램 -----");
				System.out.println("1. 전체 사원 정보 조회");
				System.out.println("2. 새로운 사원 추가");
				System.out.println("3. 사번이 일치하는 사원 정보 조회");
				System.out.println("4. 사번이 일치하는 사원 정보 수정");
				System.out.println("5. 사번이 일치하는 사원 정보 삭제");
				
				
				// 추가 (6~10)
				System.out.println("6. 입력 받은 부서와 일치하는 모든 사원 정보 조회");
				// selectDeptEmp()
				
				System.out.println("7. 입력 받은 급여 이상을 받는 모든 사원 정보 조회");
				// selectSalaryEmp()
				
				System.out.println("8. 부서별 급여 합 전체 조회");
				// selectDeptTotalSalary()
				// DB 조회 결과를 HashMap<String, Integer>에 옮겨 담아서 반환
				// 부서코드, 급여 합 조회
				
				System.out.println("9. 주민등록번호가 일치하는 사원 정보 조회");
				
				System.out.println("10. 직급별 급여 평균 조회");
				// selectJobAvgSalary()
				// DB 조회 결과를 HashMap<String, Double>에 옮겨 담아서 반환 
				// 직급명, 급여 평균(소수점 첫째자리) 조회
				
				System.out.println("0. 프로그램 종료");
				
				System.out.print("메뉴 선택 >> ");
				input = sc.nextInt();
				sc.nextLine(); //  추가!
				
				
				System.out.println();				
				
				
				switch(input) {
				case 1:  selectAll();   break;
				case 2:  insertEmployee();  break;
				case 3:  selectEmpId();   break;
				case 4:  updateEmployee();   break;
				case 5:  deleteEmployee();   break;
				case 6:  selectDeptEmp();   break;
				case 7:  selectSalaryEmp();   break;
				case 8:  selectDeptTotalSalary();   break;
				case 9:  selectEmpNo();   break;
				case 10: selectJobAvgSalary();   break;
				case 0:  System.out.println("프로그램을 종료합니다...");   break;
				default: System.out.println("메뉴에 존재하는 번호만 입력하세요.");
				}
				
				
			}catch(InputMismatchException e) {
				System.out.println("정수만 입력해주세요.");
				input = -1; // 반복문 첫 번째 바퀴에서 잘못 입력하면 종료되는 상황을 방지
				sc.nextLine(); // 입력 버퍼에 남아있는 잘못 입력된 문자열 제거해서
							   // 무한 반복 방지
			} catch (Exception e) {
				e.printStackTrace();
			}
			
			
		}while(input != 0);
	}
	
	// 주 기능 메서드

	/** 직급별 급여 평균 조회
	 * 
	 */
	private void selectJobAvgSalary() throws Exception{
		System.out.println("<직급별 급여 평균 조회>");
		Map<String, Double> map = service.selectJobAvgSalary();
		
		for(String key : map.keySet()) {
			System.out.println( key + " : " + map.get(key) + "원" );
		}
		
	}

	/** 주민등록 번호가 일치하는 사원 정보 조회
	 * 
	 */
	private void selectEmpNo() throws Exception{
		System.out.println("<주민등록 번호가 일치하는 사원 정보 조회>");
		System.out.print("주민등록번호 입력 : ");
		String empNo = sc.next();
		
		Employee emp = service.selectEmpNo(empNo);
		printOne(emp);
		
		//printOne(service.selectEmpNo(empNo))
		
	}

	/** 부서별 급여 합 전체 조회
	 * 
	 */
	private void selectDeptTotalSalary()  throws Exception{
		System.out.println("<부서별 급여  전체 조회>");
		
		// D1 : 8000000원
		Map<String, Integer> map = service.selectDeptTotalSalary();
		
		for( String key : map.keySet() ) {
			
		   System.out.println( key + " : " +   map.get(key) );
			
		}
		
	}

	/** 입력 받은 급여 이상을 받는 모든 사원 정보 조회
	 * 
	 */
	private void selectSalaryEmp() throws Exception{
		System.out.println("<입력받은 급여 이상을 받는 모든 사원 정보 조회>");
		
		System.out.print("급여 : ");
		int salary = sc.nextInt();
		
		printAll( service.selectSalaryEmp(salary) );
		
	}

	/** 입력 받은 부서와 일치하는 모든 사원 정보 조회
	 * 
	 */
	private void selectDeptEmp() throws Exception{
		System.out.println("<입력받은 부서와 일치하는 모든 사원 정보 조회>");
		
		System.out.print("부서명 : ");
		String departmentTitle = sc.nextLine();
		
		printAll( service.selectDeptEmp(departmentTitle) );
	}

	/** 사번이 일치하는 사원 정보 삭제
	 * 
	 */
	private void deleteEmployee() throws Exception{
		System.out.println("<사번이 일치하는 사원 정보 삭제>");
		
		int empId = inputEmpId();
		
		System.out.print("정말 삭제 하시겠습니까? (Y/N) : ");
		char input = sc.next().toUpperCase().charAt(0);
		// Y/N 대소문자 구분없이 입력
		
		if(input == 'Y') {
			// 삭제 수행 서비스 호출
			int result = service.deleteEmployee(empId);
			
			if(result > 0) {
				System.out.println("삭제되었습니다.");
			}else {
				System.out.println("사번이 일치하는 사원이 존재하지 않습니다.");
			}
			
			
		} else {
			System.out.println("취소되었습니다.");
		}
		
		
	}

	/** 사번이 일치하는 사원정보 수정(이메일, 전화번호, 급여)
	 * 
	 */
	private void updateEmployee() throws Exception{
		
		System.out.println("<사번이 일치하는 사원 정보 수정>");
		
		int empId = inputEmpId();
		
		System.out.print("이메일 : ");
		String email = sc.next();
		
		System.out.print("전화번호(- 제외) : ");
		String phone = sc.next();
		
		System.out.print("급여 : ");
		int salary = sc.nextInt();
		
		Employee emp = new Employee();
		
		emp.setEmpId(empId);
		emp.setEmail(email);
		emp.setPhone(phone);
		emp.setSalary(salary);
		
		int result = service.updateEmployee(emp);
		
		if(result > 0) {
			System.out.println("사원 정보가 수정되었습니다.");
		}else {
			System.out.println("사번이 일치하는 직원이 존재하지 않습니다.");
		}
		
		
		
	}

	/** 사번이 일치하는 사원 정보 조회
	 * 
	 */
	private void selectEmpId() throws Exception  {
		System.out.println("<사번이 일치하는 사원 정보 조회>");
		
		// 사번 입력 받기
		int empId = inputEmpId();
		/*
		 * System.out.print("사번 입력 : ");
			int empId = sc.nextInt();
			sc.nextLine();
			return empId;
		 * */
		
		Employee emp = service.selectEmpId(empId);
		
		printOne(emp);
		
	}

	/** 사원 정보 추가
	 * 
	 */
	private void insertEmployee() throws Exception{
		System.out.println("<사원 정보 추가>");
		
		// 사번
		int empId = inputEmpId();
		
		System.out.print("이름 : ");
		String empName = sc.next();
		
		System.out.print("주민등록번호 : ");
		String empNo = sc.next();
		
		System.out.print("이메일 : ");
		String email = sc.next();
		
		System.out.print("전화번호 : ");
		String phone = sc.next();
		
		System.out.print("부서코드(D1~D9) : ");
		String deptCode = sc.next();
		
		System.out.print("직급코드(J1~J7) : ");
		String jobCode = sc.next();
		
		System.out.print("급여등급(S1~S6) : ");
		String salLevel = sc.next();
		
		System.out.print("급여 : ");
		int salary = sc.nextInt();
		
		System.out.print("보너스 : ");
		double bonus = sc.nextDouble();
		
		System.out.print("사수번호 : ");
		int managerId = sc.nextInt();
		
		
		Employee emp = new Employee(empId, empName, empNo, email, phone, salary, 
									deptCode, jobCode, salLevel,
									bonus, managerId );
		
		int result = service.insertEmployee(emp);
		
		if(result > 0) {
			System.out.println("사원 정보 추가 성공");
		} else {
			System.out.println("사원 정보 추가 실패!");
		}
		
	}

	
	/** 사번을 입력받아 반환하는 메서드
	 * @return empId
	 */
	public int inputEmpId() {
		System.out.print("사번 입력 : ");
		int empId = sc.nextInt();
		sc.nextLine();
		return empId;
	}
	
	
	
	/** 전체 사원 정보 조회
	 * 
	 */
	private void selectAll() throws Exception {
		System.out.println("<전체 사원 정보 조회>");
		
		List<Employee> empList = service.selectAll();
		
		printAll(empList);
	
	}
	
	
	// 보조 메서드
	
	/** 전달받은 사원 List 모두 출력
	 * 
	 */
	public void printAll(List<Employee> empList) {
		
		if(empList.isEmpty()) {
			System.out.println("조회된 사원 정보가 없습니다.");
			
		} else {
			System.out.println("사번 |   이름  | 주민 등록 번호 |        이메일        |   전화 번호   | 부서 | 직책 | 급여" );
			System.out.println("------------------------------------------------------------------------------------------------");
			for(Employee emp : empList) { 
				System.out.printf(" %2d  | %4s | %s | %20s | %s | %s | %s | %d\n",
						emp.getEmpId(), emp.getEmpName(), emp.getEmpNo(), emp.getEmail(), 
						emp.getPhone(), emp.getDepartmentTitle(), emp.getJobName(), emp.getSalary());
			}
		
		}
		
		return;

	}
	
	
	/** 사원 1명 정보 출력
	 * @param emp
	 */
	public void printOne(Employee emp) {
		if(emp == null) {
			System.out.println("조회된 사원 정보가 없습니다.");
			
		} else {
			System.out.println("사번 |   이름  | 주민 등록 번호 |        이메일        |   전화 번호   | 부서 | 직책 | 급여" );
			System.out.println("------------------------------------------------------------------------------------------------");
			
			System.out.printf(" %2d  | %4s | %s | %20s | %s | %s | %s | %d\n",
					emp.getEmpId(), emp.getEmpName(), emp.getEmpNo(), emp.getEmail(), 
					emp.getPhone(), emp.getDepartmentTitle(), emp.getJobName(), emp.getSalary());
		}


	}
	

}

EmployeeService

package edu.kh.emp.model.service;

import java.sql.Connection;
import java.util.List;
import java.util.Map;

import static edu.kh.emp.common.JDBCTemplate.*;
import edu.kh.emp.model.dao.EmployeeDAO;
import edu.kh.emp.model.vo.Employee;

public class EmployeeService {

	private EmployeeDAO dao = new EmployeeDAO();
	
	/** 전체 사원 정보 조회 서비스
	 * 
	 */
	public List<Employee> selectAll() throws Exception{
		
		Connection conn = getConnection();
		
		List<Employee> list = dao.selectAll(conn);
		
		close(conn);
		
		return list;
		
	}

	/** 사원 정보 추가 서비스
	 * @param emp
	 * @return result
	 */
	public int insertEmployee(Employee emp) throws Exception{
		
		Connection conn = getConnection();
		
		int result = dao.insertEmployee(conn, emp);
		
		if(result > 0) commit(conn);
		else   			rollback(conn);
		
		close(conn);
		
		return result;
	}

	/** 사번이 일치하는 사원 정보 조회 서비스
	 * @param empId
	 * @return
	 */
	public Employee selectEmpId(int empId) throws Exception {
		
		Connection conn = getConnection();
		
		Employee emp = dao.selectEmpId(conn, empId);
		
		close(conn);
		
		return emp;
	}

	/** 사번이 일치하는 사원 정보 수정 서비스
	 * @param emp
	 * @return result
	 */
	public int updateEmployee(Employee emp) throws Exception{
		
		Connection conn = getConnection();
		
		int result = dao.updateEmployee(conn, emp);
		
		if(result > 0) commit(conn);
		else			rollback(conn);
		
		close(conn);
		
		return result;
	}

	/** 사번이 일치하는 사원 정보 삭제 서비스
	 * @param empId
	 * @return result
	 */
	public int deleteEmployee(int empId) throws Exception{
		
		Connection conn = getConnection();
		
		int result = dao.deleteEmployee(conn, empId);
		
		if(result > 0) commit(conn);
		else			rollback(conn);
		
		close(conn);
		
		return result;
	}

	/** 입력 받은 부서와 일치하는 모든 사원 정보 조회 서비스
	 * @param departmentTitle
	 * @return
	 */
	public List<Employee> selectDeptEmp(String departmentTitle) throws Exception{
		
		Connection conn = getConnection();
		
		List<Employee> list = dao.selectDeptEmp(conn, departmentTitle);
		
		close(conn);
		
		return list;
	}

	/** 입력 받은 급여 이상을 받는 모든 사원 정보 조회 서비스
	 * @param salary
	 * @return
	 */
	public List<Employee> selectSalaryEmp(int salary) throws Exception{
		Connection conn = getConnection();
		
		List<Employee> list = dao.selectSalaryEmp(conn, salary);
		
		close(conn);
		
		return list;
	}

	/** 부서별 급여 합 전체 조회 서비스
	 * @return map
	 */
	public Map<String, Integer> selectDeptTotalSalary() throws Exception {
		Connection conn = getConnection();
		
		Map<String , Integer> map = dao.selectDeptTotalSalary(conn);
		
		close(conn);
		
		return map;
	}

	/** 주민등록 번호가 일치하는 사원 정보 조회 서비스
	 * @param empNo
	 * @return
	 */
	public Employee selectEmpNo(String empNo) throws Exception{
		Connection conn = getConnection();
		
		Employee emp = dao.selectEmpNo(conn, empNo);
		
		close(conn);
		
		return emp;
		
	}

	/**직급별 급여 평균 조회 서비스
	 * @return
	 */
	public Map<String, Double> selectJobAvgSalary() throws Exception{
		
		Connection conn = getConnection();
		
		Map<String, Double> map = dao.selectJobAvgSalary(conn);
		
		close(conn);
		
		return map;
	}

	
	
}

EmployeeDAO

package edu.kh.emp.model.dao;

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import static edu.kh.emp.common.JDBCTemplate.*;

import edu.kh.emp.model.vo.Employee;

public class EmployeeDAO {
	
	private Statement stmt;
	private PreparedStatement pstmt;
	private ResultSet rs = null;
	
	private Properties prop;

	public EmployeeDAO() {
		try {
			prop = new Properties();
			prop.loadFromXML( new FileInputStream("query.xml") );
			
		}catch(Exception e) {
			e.printStackTrace();
		}
	}

	/** 전체 사원 정보 조회 DAO
	 * @param conn
	 */
	public List<Employee> selectAll(Connection conn) throws Exception{
		
		// 결과 저장용 변수 선언
		List<Employee> empList = new ArrayList<Employee>();
		
		try {
			
			String sql = prop.getProperty("selectAll");
			
			// Statement 객체 생성
			
			stmt = conn.createStatement();
			
			// SQL을 수행 후 결과(ResultSet) 반환 받음
			rs = stmt.executeQuery(sql);
			
			// 조회 결과를 얻어와 한 행씩 접근하여
			// Employee 객체 생성 후 컬럼값 담기
			// -> List 추가
			while(rs.next()) {
				
				int empId = rs.getInt("EMP_ID");
				// EMP_ID 컬럼은 문자열 컬럼이지만
				// 저장된 값들이 모두 숫자 형태
				// -> DB에서 자동으로 형변환 진행해서 얻어옴
				
				String empName = rs.getString("EMP_NAME");
				String empNo = rs.getString("EMP_NO");
				String email = rs.getString("EMAIL");
				String phone = rs.getString("PHONE");
				String departmentTitle = rs.getString("DEPT_TITLE");
				String jobName = rs.getString("JOB_NAME");
				int salary = rs.getInt("SALARY");
				
				Employee emp = new Employee(empId, empName, empNo, 
						email, phone, departmentTitle, jobName, salary );
				
				empList.add(emp); // List 담기
			
			} // while문 종료
			
			
		} finally {
			
			close(stmt);
			
		}
		
		// 결과 반환
		return empList;
		
	}

	/** 사원 정보 추가 DAO
	 * @param conn
	 * @param emp
	 * @return result
	 */
	public int insertEmployee(Connection conn, Employee emp) throws Exception{
		
		int result = 0;
		
		try {
			
			// SQL 작성
			String sql = prop.getProperty("insertEmployee");
			// INSERT INTO EMPLOYEE VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, SYSDATE, NULL, DEFAULT)
			
			// PreparedStatement 객체 생성
			pstmt = conn.prepareStatement(sql);
			
			// ? 에 알맞은 값 대입
			pstmt.setInt(1, emp.getEmpId());
			pstmt.setString(2, emp.getEmpName());
			pstmt.setString(3, emp.getEmpNo());
			pstmt.setString(4, emp.getEmail());
			pstmt.setString(5, emp.getPhone());
			pstmt.setString(6, emp.getDeptCode());
			pstmt.setString(7, emp.getJobCode());
			pstmt.setString(8, emp.getSalLevel());
			pstmt.setInt(9, emp.getSalary());
			pstmt.setDouble(10, emp.getBonus());
			pstmt.setInt(11, emp.getManagerId());
			
			result = pstmt.executeUpdate();
			
		} finally {
			close(pstmt);
		}
		
		return result;
	}

	/** 사번이 일치하는 사원 정보 조회 DAO
	 * @param conn
	 * @param empId
	 * @return emp
	 */
	public Employee selectEmpId(Connection conn, int empId) throws Exception{
		
		Employee emp = null;
		
		try {
			
			String sql = prop.getProperty("selectEmpId");
			
			pstmt = conn.prepareStatement(sql);
			
			pstmt.setInt(1, empId);
			
			rs = pstmt.executeQuery();
			
			if(rs.next()) {
				
				//int empId2 = rs.getInt("EMP_ID");
				String empName = rs.getString("EMP_NAME");
				String empNo = rs.getString("EMP_NO");
				String email = rs.getString("EMAIL");
				String phone = rs.getString("PHONE");
				String departmentTitle = rs.getString("DEPT_TITLE");
				String jobName = rs.getString("JOB_NAME");
				int salary = rs.getInt("SALARY");
				
				emp = new Employee(empId, empName, empNo, email,
								phone, departmentTitle, jobName, salary
						);
					
			}
				
		} finally {
			close(pstmt);
		}
		
		return emp;
	}

	/** 사번이 일치하는 사원 정보 수정 DAO
	 * @param conn
	 * @param emp
	 * @return result
	 */
	public int updateEmployee(Connection conn, Employee emp) throws Exception{
		
		int result = 0;
		
		try {
			String sql = prop.getProperty("updateEmployee");
			
			pstmt = conn.prepareStatement(sql);
			
			pstmt.setString(1, emp.getEmail());
			pstmt.setString(2, emp.getPhone());
			pstmt.setInt(3, emp.getSalary());
			pstmt.setInt(4, emp.getEmpId());
			
			result = pstmt.executeUpdate();
			
		} finally {
			
			close(pstmt);
		}
		
		return result;
	}

	/** 사번이 일치하는 사원 정보 삭제 DAO
	 * @param conn
	 * @param empId
	 * @return result
	 */
	public int deleteEmployee(Connection conn, int empId) throws Exception{
		int result = 0;
		
		try {
			String sql = prop.getProperty("deleteEmployee");
			
			pstmt = conn.prepareStatement(sql);
			
			pstmt.setInt(1, empId);
			
			result = pstmt.executeUpdate();
			
		} finally {
			close(pstmt);
		}
		
		return result;
	}

	/** 입력 받은 부서와 일치하는 모든 사원 정보 조회 DAO
	 * @param conn
	 * @param departmentTitle
	 * @return
	 */
	public List<Employee> selectDeptEmp(Connection conn, String departmentTitle) throws Exception{
		
		List<Employee> empList = new ArrayList<Employee>();
		
		try {
			
			String sql = prop.getProperty("selectDeptEmp");
			
			pstmt = conn.prepareStatement(sql);
			
			pstmt.setString(1, departmentTitle);
			
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				
				int empId = rs.getInt("EMP_ID"); 
				String empName = rs.getString("EMP_NAME");
				String empNo = rs.getString("EMP_NO");
				String email = rs.getString("EMAIL");
				String phone = rs.getString("PHONE");
				//String departmentTitle_1 = rs.getString("DEPT_TITLE");
				String jobName = rs.getString("JOB_NAME");
				int salary = rs.getInt("SALARY");
				
				Employee emp = new Employee(empId, empName, empNo, email, 
								phone, departmentTitle, jobName, salary);
				
				empList.add(emp);
			}
			
		} finally {
			close(pstmt);
		}
		
		return empList;
	}

	/** 입력 받은 급여 이상을 받는 모든 사원 정보 조회 DAO
	 * @param conn
	 * @param salary
	 * @return
	 */
	public List<Employee> selectSalaryEmp(Connection conn, int salary) throws Exception{
		List<Employee> empList = new ArrayList<Employee>();
		

		try {
			
			String sql = prop.getProperty("selectSalaryEmp");
			
			pstmt = conn.prepareStatement(sql);
			
			pstmt.setInt(1, salary);
			
			rs = pstmt.executeQuery();
			
			while(rs.next()) {
				
				int empId = rs.getInt("EMP_ID"); 
				String empName = rs.getString("EMP_NAME");
				String empNo = rs.getString("EMP_NO");
				String email = rs.getString("EMAIL");
				String phone = rs.getString("PHONE");
				String departmentTitle = rs.getString("DEPT_TITLE");
				String jobName = rs.getString("JOB_NAME");
				int selectSalary = rs.getInt("SALARY");
				
				Employee emp = new Employee(empId, empName, empNo, email, 
								phone, departmentTitle, jobName, selectSalary);
				
				empList.add(emp);
			}
			
		} finally {
			close(pstmt);
		}
		
		return empList;
	}

	/** 부서별 급여 합 전체 조회 DAO
	 * @param conn
	 * @return
	 */
	public Map<String, Integer> selectDeptTotalSalary(Connection conn) throws Exception {
		
		Map<String , Integer> map = new LinkedHashMap<String, Integer>();
		// LinkedHashMap : key 순서가 유지되는 HashMap (ORDER BY 절 정렬 결과 그대로 저장함)
		
		try {
			String sql = prop.getProperty("selectDeptTotalSalary");
			
			stmt = conn.createStatement();
			
			rs = stmt.executeQuery(sql);
			
			while(rs.next()) {
				String deptCode = rs.getString("DEPT_CODE");
				int total = rs.getInt("TOTAL");
				
				map.put(deptCode, total);
			}	
			
		} finally {
			close(stmt);
		}
		
		return map;
	}

	/** 주민등록 번호가 일치하는 사원 정보 조회 DAO
	 * @param conn
	 * @param empNo
	 * @return
	 */
	public Employee selectEmpNo(Connection conn, String empNo) throws Exception{
		
		// 결과 저장용 변수 선언
		Employee emp = null;
		
		try {
			String sql = prop.getProperty("selectEmpNo");
			
			pstmt = conn.prepareStatement(sql);
			
			// ? 에 알맞은값 대입
			pstmt.setString(1, empNo);
			
			// SQL 수행 후 결과 반환
			rs = pstmt.executeQuery();
			
			if(rs.next()) {
				int empId = rs.getInt("EMP_ID"); 
				String empName = rs.getString("EMP_NAME");
				//String empNo = rs.getString("EMP_NO");
				String email = rs.getString("EMAIL");
				String phone = rs.getString("PHONE");
				String departmentTitle = rs.getString("DEPT_TITLE");
				String jobName = rs.getString("JOB_NAME");
				int salary = rs.getInt("SALARY");
				
				emp = new Employee(empId, empName, empNo, email, 
								phone, departmentTitle, jobName, salary);
			}
			
		}finally {
			close(pstmt);
		}
		
		return emp;
	}

	/** 직급별 급여 평균 조회 DAO
	 * @param conn
	 * @return
	 */
	public Map<String, Double> selectJobAvgSalary(Connection conn) throws Exception{
		
		Map<String, Double> map = new LinkedHashMap<>();

		try{
			String sql = prop.getProperty("selectJobAvgSalary");
			
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
			
			while(rs.next()) {
				String jobName = rs.getString("JOB_NAME");
				double average = rs.getDouble("AVERAGE");
				
				map.put(jobName, average);
			}
			
		}finally {
			close(stmt);
		}
		
		return map;
	}
	
	
}

query

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
	<comment>query.xml file!!</comment>

	<entry key="selectAll">
		SELECT EMP_ID, EMP_NAME, EMP_NO, EMAIL, PHONE,
		NVL(DEPT_TITLE, '부서없음') DEPT_TITLE, JOB_NAME, SALARY
		FROM EMPLOYEE
		LEFT JOIN DEPARTMENT ON(DEPT_ID = DEPT_CODE)
		JOIN JOB USING(JOB_CODE)
		ORDER BY EMP_ID
	</entry>
	
	<entry key="insertEmployee">
		INSERT INTO EMPLOYEE VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, SYSDATE, NULL, DEFAULT)
	</entry>
	
	<entry key="selectEmpId">
		SELECT EMP_ID, EMP_NAME, EMP_NO, EMAIL, PHONE,
		NVL(DEPT_TITLE, '부서없음') DEPT_TITLE, JOB_NAME, SALARY
		FROM EMPLOYEE
		LEFT JOIN DEPARTMENT ON(DEPT_ID = DEPT_CODE)
		JOIN JOB USING(JOB_CODE)
		WHERE EMP_ID = ?
	</entry>
	
	<entry key="updateEmployee">
		UPDATE EMPLOYEE SET
		EMAIL = ?, PHONE = ?, SALARY = ?
		WHERE EMP_ID = ?
	</entry>
	
	<entry key="deleteEmployee">
		DELETE FROM EMPLOYEE WHERE EMP_ID = ?
	</entry>
	
	<entry key="selectDeptEmp">
		SELECT EMP_ID, EMP_NAME, EMP_NO, EMAIL, PHONE,
		NVL(DEPT_TITLE, '부서없음') DEPT_TITLE,
		JOB_NAME, SALARY
		FROM EMPLOYEE
		LEFT JOIN DEPARTMENT ON (DEPT_ID = DEPT_CODE)
		JOIN JOB USING(JOB_CODE)
		WHERE DEPT_TITLE = ?
	</entry>
	
	
	<entry key="selectSalaryEmp">
		SELECT EMP_ID, EMP_NAME, EMP_NO, EMAIL, PHONE,
		NVL(DEPT_TITLE, '부서없음') DEPT_TITLE,
		JOB_NAME, SALARY
		FROM EMPLOYEE
		LEFT JOIN DEPARTMENT ON (DEPT_ID = DEPT_CODE)
		JOIN JOB USING(JOB_CODE)
		WHERE SALARY >= ?
	</entry>
	
	<entry key="selectDeptTotalSalary">
		SELECT NVL(DEPT_CODE, '부서없음') DEPT_CODE, SUM(SALARY) TOTAL
		FROM EMPLOYEE
		LEFT JOIN DEPARTMENT ON (DEPT_ID = DEPT_CODE)
		GROUP BY DEPT_CODE
		ORDER BY DEPT_CODE
	</entry>
	
	<entry key="selectEmpNo">
		SELECT EMP_ID, EMP_NAME, EMP_NO, EMAIL, PHONE,
		NVL(DEPT_TITLE, '부서없음') DEPT_TITLE,
		JOB_NAME, SALARY
		FROM EMPLOYEE
		LEFT JOIN DEPARTMENT ON (DEPT_ID = DEPT_CODE)
		JOIN JOB USING(JOB_CODE)
		WHERE EMP_NO = ?
	</entry>
	
	<entry key="selectJobAvgSalary">
		SELECT JOB_NAME, ROUND(AVG(SALARY), 1) AVERAGE
		FROM EMPLOYEE
		JOIN JOB USING(JOB_CODE)
		GROUP BY JOB_CODE, JOB_NAME
		ORDER BY JOB_CODE
	</entry>
	
	
	
</properties>
profile
초보자

2개의 댓글

comment-user-thumbnail
2023년 8월 17일

좋은 글 감사합니다. 자주 방문할게요 :)

1개의 답글

관련 채용 정보