Web Project/ems
create employee
hmmmmmmmmmmmm
2024. 8. 10. 21:51
EmsBackendApplication.java
package net.javaguides.ems;
import org.modelmapper.ModelMapper;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class EmsBackendApplication {
@Bean
public ModelMapper modelMapper() {
return new ModelMapper();
}
public static void main(String[] args) {
SpringApplication.run(EmsBackendApplication.class, args);
}
}
springboot 어플레이케이션 진입점으로 어플리케이션 시작 시 가장 먼저 실행
application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/ems
spring.datasource.username=root
spring.datasource.password=1111
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.ddl-auto=update
app.jwt-secret=daf66e01593f61a15b857cf433aae03a005812b31234e
app.jwt-expiration-milliseconds=36000000000
데이터베이스 연결 정보랑 기타 정보를 로드
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.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@CrossOrigin("*")
@AllArgsConstructor
@RestController
@RequestMapping("/api/employees")
public class EmployeeController {
private final EmployeeService employeeService;
// 직원 정보 등록 - POST
@PostMapping
public ResponseEntity<EmployeeDto> createEmployee(@RequestBody EmployeeDto employeeDto) {
// 서비스 레이어 호출하여 직원 생성
EmployeeDto savedEmployee = employeeService.createEmployee(employeeDto);
// 생성된 직원 정보와 함께 HTTP 201 응답 반환
return new ResponseEntity<>(savedEmployee, HttpStatus.CREATED);
}
}
http 요청 수신
서비스 레이어를 호출해서 직원 생성 비즈니스 로직 처리 (서비스한테 일을 시킴)
사용자가 새 직원 생성 요청 시 실행됨 -> /api/employees 엔드포인트
EmployeeService.java
package net.javaguides.ems.service;
import net.javaguides.ems.dto.EmployeeDto;
public interface EmployeeService {
// 직원 생성 메소드 정의
EmployeeDto createEmployee(EmployeeDto employeeDto);
}
비즈니스 로직 정의
컨트롤러가 전달한 dto를 받아 직원 생성을 처리하는 메소드 선언
이건 serviceImpl에서 구현됨
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.mapper.EmployeeMapper;
import net.javaguides.ems.repository.EmployeeRepository;
import net.javaguides.ems.service.EmployeeService;
import org.springframework.stereotype.Service;
@Service
@AllArgsConstructor
public class EmployeeServiceImpl implements EmployeeService {
private final EmployeeRepository employeeRepository;
@Override
public EmployeeDto createEmployee(EmployeeDto employeeDto) {
// DTO를 엔티티로 변환
Employee employee = EmployeeMapper.mapToEmployee(employeeDto);
// 변환된 엔티티를 데이터베이스에 저장
Employee savedEmployee = employeeRepository.save(employee);
// 저장된 엔티티를 DTO로 변환하여 반환
return EmployeeMapper.mapToEmployeeDto(savedEmployee);
}
}
비즈니스 로직 구현
리포지토리 레이어를 호출해서 데이터를 저장해 (입력된 dto 데이터를 엔티티로 변환해서 데이터베이스에 저장해)
저장된 엔티티를 다시 dto로 변환해서 사용자에게 반환해
EmployeeDto.java
package net.javaguides.ems.dto;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class EmployeeDto {
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;
public class EmployeeMapper {
// DTO -> 엔티티
public static Employee mapToEmployee(EmployeeDto employeeDto) {
Employee employee = new Employee();
employee.setFullName(employeeDto.getFullName());
employee.setEmail(employeeDto.getEmail());
employee.setDepartment(employeeDto.getDepartment());
return employee;
}
// 엔티티 -> DTO
public static EmployeeDto mapToEmployeeDto(Employee employee) {
return new EmployeeDto(
employee.getId(),
employee.getEmail(),
employee.getFullName(),
employee.getDepartment()
);
}
}
dto를 엔티티로 변환하고, 엔티티를 dto로 변환
EmployeeRepository.java
package net.javaguides.ems.repository;
import net.javaguides.ems.entity.Employee;
import org.springframework.data.jpa.repository.JpaRepository;
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
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "custom-id-generator")
@SequenceGenerator(name = "custom-id-generator", sequenceName = "custom_sequence", initialValue = 1000)
private Long id;
@Column(name = "email_id", nullable = false, unique = true)
private String email;
@Column(name = "full_name")
private String fullName;
@Column(name = "department")
private String department;
}
데이터베이스 테이블 매핑
직원 정보 저장에 사용됨
@Id: 기본키