
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 반환