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: 기본키