일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- CRUD
- PYTHON
- 정처기설명
- 자바의정석
- 파이썬
- springboot
- 정처기공부
- 이것이자바다
- 정보처리기사
- 게시판
- 스프링부트
- 소프트웨어개발
- 어노테이션
- 코딩테스트
- 자바의정석요약
- 정처기예상문제
- spring
- 소프트웨어설계
- 게시판만들기
- 정보처리기사필기
- 프로그래머스
- 정처기필기
- 파이선
- 스프링
- 자바
- CRUD구현
- 정처기
- java
- function
- 게시판프로젝트
- Today
- Total
Helmi
상품 엔티티 설계 본문
상품 엔티티 설계하기
@Entity(엔티티)
: 데이터베이스의 테이블에 대응하는 클래스
이 어노테이션이 붙은 클래스는 JPA에서 관리
상품 엔티티 만들기 위해서는 상품 테이블에 어떤 데이터 저장되어야 할지 설계해야 함.
Lombok 사용시 @Getter, @Setter, @ToString 등 자동으로 만들어주므로 코드 깔끔히 설계 가능.
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 |