Entity
- 데이터베이스의 테이블에 대응하는 클래스
- 테이블에 어떤 데이터가 저장되어야 할지 설계
package com.shop.entity;
import com.shop.constant.ItemSellStatus;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.persistence.*;
import java.time.LocalDateTime;
@Getter
@Setter
@ToString
@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 ItemSellStatus itemSellStatus; // 상품 판매 상태
private LocalDateTime regTime; // 등록 시간
private LocalDateTime updateTime; // 수정 시간
}
@Entity
: 해당 클래스를 entity로 선언
@Table
: entity와 메핑할 DB 테이블을 지정
@Id
: 테이블의 기본키에 사용할 속성 지정
@GeneratedValue
: 키 값을 생성 방식 지정strategy = GenerationType.AUTO
: JPA 구현체가 자동으로 생성 전략 결정strategy = GenerationType.IDENTITY
: 기본키 생성을 데이터베이스에 위임 @Column
: 객체 필드와 DB 컬럼을 매핑name
: 필드와 매핑할 컬럼의 이름 설정unique
: 중복 가능 여부 설정length
: String 타입의 길이 제한 설정 (default=255)nullable
: null 값의 허용 여부 설정@Lob
: BLOB, CLOB 타입 매핑
CLOB - 문자형 대용량 파일을 저장하는데 사용하는 데이터 타입
BLOB - 이미지, 사운드, 비디오 등의 멀티미디어 데이터를 저장하는데 사용하는 데이터 타입
@Enumerated
: enum 타입 매핑
@Temporal
: 날짜 타입 매핑
@Transient
: 해당 필드 데이터베이스 매핑 무시
Repository
- Data access object
- Entity로 구성된 DB에 접근하는 메서드들을 사용하기 위한 인터페이스
package com.shop.repository;
import com.shop.entity.Item;
import org.springframework.data.jpa.repository.JpaRepository;
public interface ItemRepository extends JpaRepository<Item, Long> {
}
JPARepository
를 상속받는 repositoryentity의 타입 클래스와 기본키 타입을 제네릭 타입으로 사용
기본적인 CRUD 및 페이징 처리를 위한 메소드가 정의되어 있음
JPARepository
에서 지원하는 기본 메소드save(entity)
: entity 저장delete(key)
: entity 삭제count()
: entity의 개수 반환findOne(key)
: key에 해당하는 entity 반환findAll()
: 모든 entity 반환