목차
1. LocalDateTime 클래스 타입
2. @Enumerated 상태
3. findVerifiedMember for updateMember, findMember, deleteMember Service 메서드
4. verifyExist변수명 for createMember Service메서드
3,4 차이는 어떤 케이스에 예외;를 발생시키느냐
존재하면 발생
존재하지 않으면 발생
가장 큰 차이 : 반환 값이 있다 없다
1. 등록 시간 혹은 수정 시간 타입 = LocalDateTime
@Column(nullable = false)
private LocalDateTime createdAt = LocalDateTime.now(); // (2)
// (3)
@Column(nullable = false, name = "LAST_MODIFIED_AT")
private LocalDateTime modifiedAt = LocalDateTime.now();
modifiedAt 사용가능 예제 코드
public Order updateOrder(Order order) {
Order findOrder = findVerifiedOrder(order.getOrderId());
Optional.ofNullable(order.getOrderStatus())
.ifPresent(orderStatus -> findOrder.setOrderStatus(orderStatus));
findOrder.setModifiedAt(LocalDateTime.now());
return orderRepository.save(findOrder);
}
2. @Enumerated
@NoArgsConstructor
@Getter
@Setter
@Entity(name = "ORDERS")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long orderId;
@Column(nullable = false)
private LocalDateTime createdAt = LocalDateTime.now();
@Column(nullable = false, name = "LAST_MODIFIED_AT")
private LocalDateTime modifiedAt = LocalDateTime.now();
// (1)
@Enumerated(EnumType.STRING) // (2)
private OrderStatus orderStatus = OrderStatus.ORDER_REQUEST;
public enum OrderStatus {
ORDER_REQUEST(1, "주문 요청"),
ORDER_CONFIRM(2, "주문 확정"),
ORDER_COMPLETE(3, "주문 완료"),
ORDER_CANCEL(4, "주문 취소");
@Getter
private int stepNumber;
@Getter
private String stepDescription;
OrderStatus(int stepNumber, String stepDescription) {
this.stepNumber = stepNumber;
this.stepDescription = stepDescription;
}
}
}
1. @Enumerated : enum 타입과 매핑할 때 사용하는 애너테이션
2. @Enumerated Attribute
A. (EnumType.ORDINAL) : enum의 순서를 나타내는 숫자를 테이블에 저장
B. (EnumType.STRING) : enum의 이름을 테이블에 저장 <권장>
>> A의 경우, 기존에 정의되어 있는 enum 사이에 새로운 enum을 추가하면,
이전에 저장되어 있는 enum 순서 번호와 enum에 정의되어 있는 순서가 일치하지 않는 문제가 발생한다.
OrderPatchDto에 private Order.OrderStatus orderStatus; 추가해야할 수 있음
OrderResponseDto에도 private Order.OrdersStatus orderStatus 추가해야할 수 있음
3. findVerified엔티티 for updateMember, findMember, deleteMember Service 메서드
-findVerifiedCoffee-
public Coffee findVerifiedCoffee(long coffeeId) {
Optional<Coffee> optionalCoffee = coffeeRepository.findById(coffeeId);
Coffee findCoffee =
optionalCoffee.orElseThrow(()->
new BusinessLogicException(ExceptionCode.COFFEE_NOT_FOUND));
return findCoffee;
}
-updateCoffee-
public Coffee updateCoffee(Coffee coffee) {
Coffee findCoffee = findVerifiedCoffee(coffee.getCoffeeId());
Optional.ofNullable(coffee.getKorName())
.ifPresent(korName -> findCoffee.setKorName(korName));
Optional.ofNullable(coffee.getEngName())
.ifPresent(engName -> findCoffee.setEngName(engName));
Optional.ofNullable(coffee.getPrice())
.ifPresent(price -> findCoffee.setPrice(price));
Optional.ofNullable(coffee.getCoffeeStatus())
.ifPresent(coffeeStatus -> findCoffee.setCoffeeStatus(coffeeStatus);
return coffeeRepository.save(findCoffee);
}
-findCoffee-
public Coffee findCoffee(long coffeeId) {
return findVerifiedCoffeeByQuery(coffeeId);
}
-deleteMember-
public void deleteCoffee(long coffeeId) {
Coffee coffee = findVerifiedCoffee(coffeeId);
coffeeRepository.delete(coffee);
}
4. verifyExist변수명 for createMember Service메서드
-verifyExistCoffee-
private void verifyExistCoffee(String coffeeCode) {
Optional<Coffee> coffee = coffeeRepository.findByCoffeeCode(coffeeCode);
if(coffee.isPresent())
throw new BusinessLogicException(ExceptionCode.COFFEE_CODE_EXISTS);
}
-createCoffee-
public Coffee createCoffee(Coffee coffee) {
String coffeeCode = coffee.getCoffeeCode().toUpperCase();
verifyExistCoffee(coffeeCode);
coffee.setCoffeeCode(coffeeCode);
return coffeeRepository.save(coffee);
}
'백엔드 학습 과정 > Section 3 [Spring MVC, JDBC, JPA, RestDo' 카테고리의 다른 글
#5. JPA (0) | 2023.01.01 |
---|---|
JPA에서 em을 활용한 회원과 주문 정보 저장 및 호출 흐름 (0) | 2023.01.01 |
Spring Data JDBC - Service 클래스 기능별 코드 (0) | 2022.12.31 |
#4. Spring Data JDBC (0) | 2022.12.23 |
#3. Spring 예외 처리 (0) | 2022.12.23 |