Framework/Spring
Data JPA를 이용한 상품 구매 사이트 Item 엔티티 개발 예제
MINGYUM
2021. 9. 13. 03:48
개발의 편의성을 위해서 순수 JPA에서 Data JPA로 개발 방법을 옮겼다.
* 추가 요구사항 - 카트 : 아이템 = 다 : 1 연관관계 추가하기
0. 개발환경 설정
build.gradle
compile('org.springframework.boot:spring-boot-starter-data-jpa')
1. Item.java
package springstudy.spring.domain;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Table(name = "item")
@Getter @Setter
public class Item {
@Id @GeneratedValue
@Column(name = "item_id")
private Long id;
private String itemName;
@Lob
@Column(length = 100000)
private byte[] itemImage;
// byte배열로 Blob 타입의 itemImage 필드 생성
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "category_id")
private String itemCategory;
private String itemQuantity;
private String itemFrom;
private String itemIntro;
private String itemPrice;
private String itemDescription;
private List<String> itemOption = new ArrayList<>();
@OneToMany(mappedBy = "item", fetch = FetchType.LAZY)
private List<OrderItem> orderItems = new ArrayList<>();
// DB에 없는데, Item : Order_item 이 '1 : 다' 관계이므로 Item 클래스에 @OneToMany 어노테이션 추가
// OrderItem DB 생성자는 OrderItem 엔티티 내부에 다음 주석과 같이 작성해야 함.
/*
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "item_id")
private Item item;
*/
// Item : ItemQuestion 의 1 : 다 매핑
@OneToMany(mappedBy = "item", fetch = FetchType.LAZY)
private List<ItemQuestion> itemQuestions = new ArrayList<>();
// Item과 Category_item 1 : 1 매핑, Item이 연관관계의 주인이므로 @JoinColumn 추가
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "category_id")
private CategoryItem categoryItem;
}
객체의 기본적인 필드 정보와 타 객체와의 연관관계를 표시하였다.
2. ItemRepository.java
JpaRepository를 사용해 인터페이스를 만든다. 이때 인터페이스 파일은 Item.java와 같은 디렉토리에 위치하도록 한다.
package springstudy.spring.domain;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface ItemRepository extends JpaRepository<Item, Long> {
List<Item> findByName(String name);
}
추가적으로 필요한 메소드는 인터페이스에 선언만 해놓으면 함수 명을 Jpa가 분석해 메소드를 만들어준다.
아래는 JPA Repository 내장 클래스이다.
3. ItemService.java, ItemController.java
순수 JPA와 동일한 느낌으로 작성하였다.