저번 글에서 Member 클래스를 JPA를 사용하여 저장했다.
이번에는 Item Entity를 만들고 JPA로 저장할거다!!

ERD를 보면 회원과 상품이 1:N 관계임을 알 수 있다!
@Id로 PK를 지정하고 자동생성하는 어노테이션 추가
아래의 코드로 외래키 지정한다.
회원 식별 아이디를 Item의 외래키로 지정하여 누가 상품을 등록했는지를 확인할 수 있도록 한다.
@ManyToOne
@JoinColumn(name = "id", nullable = false)
private Member member;

JpaItemRepository를 생성한다.
데이터의 조작을 직접 하기 때문에 @Transactional을 사용하였다.
package com.shopingmall.seungjae.repository;
import com.shopingmall.seungjae.domain.Item;
import jakarta.persistence.EntityManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Optional;
@Repository
@Transactional
public class JpaItemRepository implements ItemRepository {
private final EntityManager em;
@Autowired
public JpaItemRepository(EntityManager em) {
this.em = em;
} // 생성자 주입
@Override
public Item save(Item item) {
em.persist(item);
return item;
}
@Override
public List<Item> findByName(String itemName) {
List<Item> items = em.createQuery("select i from Item i where i.itemName = :itemName",Item.class)
.setParameter("itemName", itemName)
.getResultList();
return items;
}
@Override
public Item findById(Long itemId) {
Item item = em.find(Item.class, itemId);
return item;
}
@Override
public List<Item> findAll() {
List<Item> items = em.createQuery("select i from Item i", Item.class).getResultList();
return items;
}
@Override
public void delete(Long deleteId) {
Item item = findById(deleteId);
em.remove(item);
}
}
기존에는 sellerName과 sellerId가 있었는데 이를 없애고 외래키로 수정했다.
Thymeleaf도 바꿔준 내용에 맞게 수정했다.
초기부터 ERD를 제대로 설정하고 프로젝트를 진행했다면 아마 이런 일은 없었을 것 같았다.
따라서 전체적인 ERD를 정리하는 시간이 필요하다고 느꼈기 때문에 프로젝트 8에서 지금까지 생각한 중고거래 쇼핑몰의 ERD를 그려보겠다!
item table을 생성해준 sql

정상적으로 저장되는 것을 볼 수 있다.

findById도 정상적으로 동작하기 때문에 제품 상세가 제대로 출력된다.

delete 역시 정상작동하여 제품목록에서 제품이 삭제된 모습을 볼 수 있다.

새로 아이템을 생성하고 MySQL Workbench에서 item table을 확인해본 결과 아이템이 정상적으로 저장되어 있는 것을 볼 수 있다.
저기 보이는 id는 member의 id를 저장한 것이다.

장바구니 basket Entity와 Repository, Thymeleaf를 만들어 볼 계획이다! 다음 시간에 봅시당~