[스프링부트JPA] 쇼핑몰 상품엔티티 설계

JEONG SUJIN·2023년 1월 23일
0

constant 패키지 생성 > ItemStatus.java 생성

상태를 나타내는 enum타입의 클래스 생성

public enum ItemStatus {
SELL, SOLD_OUT
}

엔티티 매핑 관련 어노테이션

어노테이션설명
@Entity클래스를 엔티티로 선언
@Table엔티티와 매핑할 테이블을 지정
@Id테이블의 기본키에 사용할 속성을 지정
@GeneratedValue키 값을 생성하는 전략 명시
@Column필드와 컬럼 매핑

생성 전략

@GeneratedValue(strategy = GenerationType.AUTO)

생성 전략설명
GenerationType.AUTO(default)JPA 구현체가 자동으로 생성 전략 결정
GenerationType.IDENTITY기본키 생성을 데이터베이스에 위임
GenerationType.SEQUENCE데이터베이스 시퀀스 오브젝트를 이용한 기본키 생성
GenerationTYPE.TABLE키 생성용 테이블 사용, @TableGenerator 필요

entity 패키지 생성 > Item.java 생성

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.shopping.study.constant.ItemStatus;
import lombok.Data;

@Data
@Entity
@Table(name="item")
public class Item {
	@Id
	@Column(name="item_id")
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id; //상품아이디 
	
	@Column(nullable = false, length = 50)
	private String itemNm; //상품
	
	@Column(name="price" , nullable = false)
	private int price; //상품가
	
	@Column(nullable = false)
	private int stockNumber; //재고
	
	@Lob
	@Column(nullable = false) //값이 항상있어야 
	private String itemDetail; //상품상세설명
	
	@Enumerated(EnumType.STRING)
	private ItemStatus itemStatus; //상품판매상태 
	
	private LocalDateTime regTime; //등록시간
	private LocalDateTime updateTime; //수정시간
}

@GeneratedValue(strategy = GenerationType.AUTO)
MySQL에서 AUTO_INCREMENT를 이용해 데이터베이스에 INSERT 쿼리문을 보내면 자동으로 기본키 값을 증가시킬 수 있다.

데이터베이스에 의존하지 않고 기본키를 할당하는 방법으로 데이터베이스가 변경되더라도 코드를 수정할 필요 없다.

nullable은 @Column의 속성 중 하나로, 기본값은 true이다.
값을 false로 설정해 주면, 해당 필드는 DDL 생성 시 not null이라는 조건이 붙은 채로 생성된다.

Entity 생성하고, 실행해보면 item 테이블이 생성되는 쿼리문을 콘솔창에 보인다.

데이터베이스 들어가보면 테이블이 만들어진걸 볼 수 있다.!
업로드중..

profile
기록하기

0개의 댓글