Helmi

상품 엔티티 설계 본문

SpringBoot

상품 엔티티 설계

Helmi 2023. 3. 13. 15:44

상품 엔티티 설계하기

@Entity(엔티티)

: 데이터베이스의 테이블에 대응하는 클래스

이 어노테이션이 붙은 클래스는 JPA에서 관리

 

상품 엔티티 만들기 위해서는 상품 테이블에 어떤 데이터 저장되어야 할지 설계해야 함.

Lombok 사용시 @Getter, @Setter, @ToString 등 자동으로 만들어주므로 코드 깔끔히 설계 가능.

 

com.shop.constant - enum 클래스

com.shop 패키지 아래 constant 패키지 하나 생성해 enum 타입 모아둠.

상품이 현재 판매 중인지 품절 상태인지 나타내는 enum 타입 클래스.

enum 클래스 사용 : 연관된 상수들 모아둘 수 있음. enum에 정의한 타입만 값을 가지도록 컴파일 시 체크 가능

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.tistory.com/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) @Entity, @Table(name="item") : item 클래스를 entity로 선언.

    @Table 통해 어떤 테이블과 매핑될지 지정. item 테이블과 매핑되도록 name을 item 으로 지정

 

2) @Id, @GeneratedValue(strategy=GenerationType.AUTO) : entity로 선언한 클래스는 반드시 기본키 가져야.

    기본키 되는 멤버변수에 @Id 붙여줌. 테이블에 매핑될 컬럼의 이름을 @Column 통해 설정. item클래스의 id변수와 item테이블의 item_id 컬럼이 매핑되도록 함.

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

 

3) @Column(name="item_id") : nullable 속성 이용해 항상 값이 있어야 하는 필드는 not null 설정. String 필드는 default값으로 255 설정되어 있음. 각 String 필드마다 필요 길이를 length 속성에 default 값을 매핑.

'SpringBoot' 카테고리의 다른 글

Repository 설계하기  (0) 2023.03.14
Entity 매핑 관련 어노테이션  (0) 2023.03.13
쇼핑몰 프로젝트 생성  (0) 2023.03.12
JPA란?  (0) 2023.03.07
@Lombok 어노테이션 정리  (0) 2023.03.06