제품 물리적 디자인


디자인 제품 엔터티

@실재

: 데이터베이스의 테이블에 해당하는 클래스

이 주석으로 주석이 달린 클래스는 JPA에서 관리합니다.

제품 엔터티를 생성하기 위해서는 제품 테이블에 어떤 데이터를 저장할지 설계해야 합니다.

Lombok을 사용하면 @Getter, @Setter, @ToString 등이 자동으로 생성되기 때문에 깔끔하게 코드를 설계할 수 있습니다.


com.shop.constant – enum 클래스

com.shop 패키지 아래에 상수 패키지를 만들어 열거 유형을 수집합니다.

제품이 현재 판매 중인지 품절인지를 나타내는 열거형 유형 클래스입니다.

열거형 클래스 사용: 관련 상수 수집할 수 있습니다.

열거형에 정의된 유형만 값을 갖도록 컴파일 타임에 확인할 수 있습니다.

package com.shop.constant;

public enum ItemSellStatus {
	SELL, SOLD_OUT
}

Item 클래스가 가져야 하는 멤버 변수 선언


package com.shop.entity;

import java.time.LocalDateTime;

import javax.persistence.Table;

import com.shop.constant.ItemSellStatus;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Entity
@Getter
@Setter
@ToString
@Table(name="item")
public class Item {
	
	private Long id;
	
	private String itemNm; //상품명
	
	private int price;  //가격
 	
	private int stockNumber;  //재고
	
	private String itemDetail; //상품 상세 설명
	
	private ItemSellStatus itemSellStatus; //상품 판매 상태
	
	private LocalDateTime regTime;
	
	private LocalDateTime updatTime;
}

상품 정보에서 상품 코드, 가격, 상품명, 상품 설명, 판매 상태를 생성합니다.

(세일현황은 재고가 없을시 상품을 미리 등록하시거나 추후에 ‘판매중’으로 변경하시거나, 품절시 전면에 노출되지 않도록 코드로 남겨두시기 바랍니다)

엔터티 매핑과 관련된 주석

: https://helmi./11

4세대 전략 @GeneratedType.AUTO 이를 사용하여 기본 키를 생성합니다.

데이터베이스에 의존하지 않고 기본 키를 할당하는 방법. JPA 구현은 IDENTITY, SEQUENCE, TABLE 생성 전략 중 하나를 자동으로 선택합니다.

데이터베이스가 변경될 때 코드를 수정할 필요가 없습니다.

제품 클래스 엔터티 매핑

package com.shop.entity;

import java.time.LocalDateTime;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;

import com.shop.constant.ItemSellStatus;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Entity
@Getter
@Setter
@ToString
@Table(name="item")
public class Item {
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "item_id")
	private Long id;
	
	@Column(nullable = false, length = 50)
	private String itemNm; //상품명
	
	private int price;  //가격
 	
	private int stockNumber;  //재고
	
	@Column(nullable = false)
	@Lob
	private String itemDetail; //상품 상세 설명
	
	@Enumerated(EnumType.STRING)
	private ItemSellStatus itemSellStatus; //상품 판매 상태
	
	private LocalDateTime regTime;
	
	private LocalDateTime updatTime;
}

1) @엔티티, @테이블(이름=”항목”): 항목 클래스를 엔터티로 선언합니다.

@Table을 통해 매핑할 테이블을 지정합니다.

프로젝트 테이블과 매핑할 프로젝트로 이름을 지정합니다.

2) @Id, @GeneratedValue(전략=GenerationType.AUTO) : 엔터티로 선언된 클래스에는 기본 키가 있어야 합니다.

기본 키가 되는 멤버 변수에 @Id를 추가합니다.

@Column을 통해 테이블에 매핑할 컬럼명을 설정한다.

항목 클래스의 id 변수는 항목 테이블의 item_id 열에 매핑됩니다.

기본 키 생성 전략을 @GeneratedValue에 의해 AUTO로 지정

3) @열(이름=”항목_ID”): 항상 값이 있어야 하는 필드는 nullable 속성을 사용하여 null을 허용하지 않게 만듭니다.

문자열 필드는 기본값으로 255로 설정됩니다.

각 문자열 필드에 대해 원하는 길이는 길이 속성의 기본값에 매핑됩니다.