Web Project/ems
select employees
hmmmmmmmmmmmm
2024. 8. 12. 19:41
EmployeeController.java
package net.javaguides.ems.controller;
import lombok.AllArgsConstructor;
import net.javaguides.ems.dto.EmployeeDto;
import net.javaguides.ems.service.EmployeeService;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@CrossOrigin("*")
@AllArgsConstructor
@RestController
@RequestMapping("/api/employees")
public class EmployeeController {
private final EmployeeService employeeService;
// 특정 ID의 직원 정보를 조회하는 엔드포인트
@GetMapping("/{id}")
public ResponseEntity<EmployeeDto> getEmployeeById(@PathVariable("id") Long employeeId) {
// 서비스 레이어에서 직원 정보를 조회하고, 그 결과를 클라이언트에 반환
EmployeeDto employeeDto = employeeService.getEmployeeById(employeeId);
return ResponseEntity.ok(employeeDto);
}
// 모든 직원 정보를 조회하는 엔드포인트
@GetMapping
public ResponseEntity<List<EmployeeDto>> getAllEmployees() {
// 서비스 레이어에서 모든 직원 정보를 조회하고, 그 결과를 클라이언트에 반환
List<EmployeeDto> employees = employeeService.getAllEmployees();
return ResponseEntity.ok(employees);
}
}
EmployeeService.java
package net.javaguides.ems.service;
import net.javaguides.ems.dto.EmployeeDto;
import java.util.List;
// 직원 관련 비즈니스 로직을 처리하는 서비스 인터페이스
public interface EmployeeService {
// 특정 ID의 직원 정보를 조회
EmployeeDto getEmployeeById(Long employeeId);
// 모든 직원 정보를 조회
List<EmployeeDto> getAllEmployees();
}
EmployeeServiceImpl.java
package net.javaguides.ems.service.impl;
import lombok.AllArgsConstructor;
import net.javaguides.ems.dto.EmployeeDto;
import net.javaguides.ems.entity.Employee;
import net.javaguides.ems.exception.ResourceNotFoundException;
import net.javaguides.ems.mapper.EmployeeMapper;
import net.javaguides.ems.repository.EmployeeRepository;
import net.javaguides.ems.service.EmployeeService;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
@Service
@AllArgsConstructor
public class EmployeeServiceImpl implements EmployeeService {
private final EmployeeRepository employeeRepository;
// 특정 ID의 직원 정보를 데이터베이스에서 조회하고 DTO로 변환하여 반환
@Override
public EmployeeDto getEmployeeById(Long employeeId) {
// 데이터베이스에서 직원 정보를 조회, 조회된 직원이 없을 경우 예외를 발생시킴
Employee employee = employeeRepository.findById(employeeId)
.orElseThrow(() -> new ResourceNotFoundException("해당 직원이 없습니다"));
// 조회된 직원 엔티티를 DTO로 변환하여 반환
return EmployeeMapper.mapToEmployeeDto(employee);
}
// 모든 직원 정보를 데이터베이스에서 조회하고 DTO 리스트로 변환하여 반환
@Override
public List<EmployeeDto> getAllEmployees() {
// 모든 직원 정보를 ID 역순으로 정렬하여 조회
List<Employee> employees = employeeRepository.findAll(Sort.by(Sort.Order.desc("id")));
// 조회된 직원 엔티티 리스트를 DTO 리스트로 변환하여 반환
return employees.stream()
.map(EmployeeMapper::mapToEmployeeDto)
.collect(Collectors.toList());
}
}
EmployeeDto.java
package net.javaguides.ems.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
// 직원 정보를 전송하기 위한 데이터 전송 객체 (DTO)
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class EmployeeDto {
// 직원의 고유 ID
private Long id;
// 직원의 이메일 주소
private String email;
// 직원의 전체 이름
private String fullName;
// 직원이 속한 부서
private String department;
}
EmployeeMapper.java
package net.javaguides.ems.mapper;
import net.javaguides.ems.dto.EmployeeDto;
import net.javaguides.ems.entity.Employee;
// Employee 엔티티와 EmployeeDto 간의 변환을 수행하는 매퍼 클래스
public class EmployeeMapper {
// EmployeeDto -> Employee 엔티티
public static Employee mapToEmployee(EmployeeDto employeeDto) {
Employee employee = new Employee();
employee.setFullName(employeeDto.getFullName());
employee.setEmail(employeeDto.getEmail());
employee.setDepartment(employeeDto.getDepartment());
return employee;
}
// Employee 엔티티 -> EmployeeDto
public static EmployeeDto mapToEmployeeDto(Employee employee) {
return new EmployeeDto(
employee.getId(),
employee.getEmail(),
employee.getFullName(),
employee.getDepartment()
);
}
}
EmployeeRepository.java
package net.javaguides.ems.repository;
import net.javaguides.ems.entity.Employee;
import org.springframework.data.jpa.repository.JpaRepository;
// Employee 엔티티와 데이터베이스 간의 상호작용을 담당하는 리포지토리 인터페이스
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
}
Employee.java
package net.javaguides.ems.entity;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
// 직원 정보를 데이터베이스에 저장하기 위한 엔티티 클래스
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "employees", schema = "ems")
public class Employee {
// 직원 ID (기본키, 자동 생성)
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "custom-id-generator")
@SequenceGenerator(name = "custom-id-generator", sequenceName = "custom_sequence", initialValue = 1000)
private Long id;
// 직원 이메일 (유일한 값, null 허용되지 않음)
@Column(name = "email_id", nullable = false, unique = true)
private String email;
// 직원 전체 이름
@Column(name = "full_name")
private String fullName;
// 직원이 속한 부서
@Column(name = "department")
private String department;
}