![](https://velog.velcdn.com/images/songt/post/b2a82bef-0300-4045-a2d6-758f4943b258/image.jpg)
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>
좋은 글 감사합니다. 자주 방문할게요 :)