Jin's Dev Story

[스프링 부트 쇼핑몰 프로젝트 with JPA] 1-1. 상품 Entity 설계 본문

Web & Android/스프링 부트 쇼핑몰 프로젝트 with JPA

[스프링 부트 쇼핑몰 프로젝트 with JPA] 1-1. 상품 Entity 설계

woojin._. 2023. 10. 15. 09:53
이 내용은 스프링 부트 쇼핑몰 프로젝트 with JPA 책을 학습한 내용입니다.

1. 상품 판매 상태 enum 설계

  • enum 클래스에 대한 개념
  • kr.spring.item.constant.item.java 생성
  • 상품의 현재 판매 상태 (판매, 품절)를 나타내는 상수값 (SELL, SOLD_OUT)
package kr.spring.item.constant;
// 상품의 현재 판매 상태를 나타내는 상수값

public enum ItemSellStatus {
    SELL, SOLD_OUT
}

2. 상품 클래스 생성

  • kr.spring.item.entity.java 생성
  • 상품 판매 상태의 값은 ItemSellStatus 열거형의 값을 가짐
package kr.spring.item.entity;
// 아이템 엔티티
import jakarta.persistence.*;
import kr.spring.exception.OutOfStockException;
import kr.spring.item.constant.ItemSellStatus;
import kr.spring.item.dto.ItemFormDto;
import kr.spring.utils.entity.BaseEntity;
import lombok.*;

@Entity
@Table(name = "my_item") // 테이블 명칭 지정
@Getter
@Setter // 필수 아님
@ToString // 문자열 자동 생성
@NoArgsConstructor // 빈생성자 생성
@AllArgsConstructor //모든 entity에 대해서 생성자를 만든다.
public class Item {

    @Id //기본키 설정
    @GeneratedValue(strategy = GenerationType.IDENTITY) //mysql의 경우 identity를 사용.
    @Column(name = "item_id")  //name 속성은 column의 이름을 변경할 수 있다.
    private Long id;                     // 상품 코드

    //	null을 허용하지 않음.
    @Column(nullable = false, length = 50)
    private String itemNm;               // 상품 이름

    @Column(nullable = false)
    private int price;                   // 상품 가격

    @Column(nullable = false, name="number")
    private int stockNumber;             // 재고 수량

    //	열거형은 기본적으로 숫자로 다루는 것이 원칙. 해당 어노테이션은 열거형을 나타내는 어노테이션
    //	ORDINAL = 숫자로 다룬다. STRING = 문자로 다룬다.
    @Enumerated(EnumType.STRING)
    private ItemSellStatus itemSellStatus;

    @Lob // 큰 데이터를 저장하는데 사용하는 데이터형(동영상, 이미지 등)
    @Column(nullable = false)
    private String itemDetail;           // 상품 상세 설명

    private LocalDateTime regTime;       // 등록 시간

    private LocalDateTime updateTime;    // 수정 시간
}

3. 상품 테이블 생성

  • Web Application 실행 시 @Entity 지정된 클래스를 기반으로 테이블 매핑
  • spring.jpa.hibernate.ddl-auto=create 설정으로 인해서 테이블 drop 후 create
  • spring.jpa.hibernate.ddl-auto=update 설정인 경우엔 테이블 update

MySQL-WorkBench or DBeaver 에서 초기에 환경설정한 데이터베이스명으로 생성된 테이블 확인