[Spring Data] JPA - Entity and Repository

Seonghun Kim·2022년 8월 14일
1

Spring!

목록 보기
4/8
post-thumbnail

📌 Entity

Entity

  • 데이터베이스의 테이블에 대응하는 클래스
  • 테이블에 어떤 데이터가 저장되어야 할지 설계

✔ Example (Item.java)

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;  // 수정 시간

}
  • Lombok annotation 이용
  • entity annotation으로 DB 매핑 방식들을 표현

✔ Entity mapping annotation

  • @Entity : 해당 클래스를 entity로 선언

  • @Table : entity와 메핑할 DB 테이블을 지정

  • @Id : 테이블의 기본키에 사용할 속성 지정

  • @GeneratedValue : 키 값을 생성 방식 지정
    • strategy = GenerationType.AUTO : JPA 구현체가 자동으로 생성 전략 결정
    • strategy = GenerationType.IDENTITY : 기본키 생성을 데이터베이스에 위임
      • Mysql의 경우 AUTO_INCREMENT로 기본키 생성
  • @Column : 객체 필드와 DB 컬럼을 매핑
    • name : 필드와 매핑할 컬럼의 이름 설정
    • unique : 중복 가능 여부 설정
    • length : String 타입의 길이 제한 설정 (default=255)
    • nullable : null 값의 허용 여부 설정
  • @Lob : BLOB, CLOB 타입 매핑

    CLOB - 문자형 대용량 파일을 저장하는데 사용하는 데이터 타입
    BLOB - 이미지, 사운드, 비디오 등의 멀티미디어 데이터를 저장하는데 사용하는 데이터 타입

  • @Enumerated : enum 타입 매핑

  • @Temporal : 날짜 타입 매핑

  • @Transient : 해당 필드 데이터베이스 매핑 무시


📌 Repository

Repository

  • Data access object
  • Entity로 구성된 DB에 접근하는 메서드들을 사용하기 위한 인터페이스

✔ Example (ItemRepository.java)

package com.shop.repository;

import com.shop.entity.Item;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ItemRepository extends JpaRepository<Item, Long> {

}
  • JPARepository를 상속받는 repository

✔ JPARepository

  • entity의 타입 클래스와 기본키 타입을 제네릭 타입으로 사용

  • 기본적인 CRUD 및 페이징 처리를 위한 메소드가 정의되어 있음

  • JPARepository에서 지원하는 기본 메소드
    • save(entity) : entity 저장
    • delete(key) : entity 삭제
    • count() : entity의 개수 반환
    • findOne(key) : key에 해당하는 entity 반환
    • findAll() : 모든 entity 반환

0개의 댓글