Spring boot 중고거래 쇼핑몰 사이트 만들기 프로젝트 7-2 (JPA로 Item Entity 저장하기)

전승재·2023년 8월 12일

저번 글에서 Member 클래스를 JPA를 사용하여 저장했다.

이번에는 Item Entity를 만들고 JPA로 저장할거다!!


ERD를 보면 회원과 상품이 1:N 관계임을 알 수 있다!

Entity

@Id로 PK를 지정하고 자동생성하는 어노테이션 추가
아래의 코드로 외래키 지정한다.
회원 식별 아이디를 Item의 외래키로 지정하여 누가 상품을 등록했는지를 확인할 수 있도록 한다.

	@ManyToOne
    @JoinColumn(name = "id", nullable = false)
    private Member member;

Repository

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를 저장한 것이다.

다음 7-3 게시물에는,,

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

0개의 댓글