스프링 데이터 JPA 기능 사용
이전에 스프링 JPA를 통해 구현한 코드 중 ItemRepository와 UserRepository를 스프링 데이터 JPA 기능을 이용해 코드를 줄였다. 다음에는 장바구니 기능을 다시 구현할 예정이다. 사용자들이 같은 장바구니를 사용하도록 설계되었는데 왜 그런 바보 같은 짓을 했는지 잘 모르겠지만 장바구니 기능을 다시 구현해서 가능하면 스프링 데이터 JPA로 깔끔하게 코드를 작성할 예정이다.
장바구니 오류 수정
공동 장바구니를 사용하는 것처럼 오류가 발생했었는데 세션에서 사용자 정보를 가져와서 사용자 간에 장바구니 분리를 통해 오류를 해결했다.
장바구니 레포지토리 코드 줄이기
package lemonsoju_group.lemonsoju_artifact.repository;
import lemonsoju_group.lemonsoju_artifact.domain.Basket;
import lemonsoju_group.lemonsoju_artifact.domain.Item;
import lemonsoju_group.lemonsoju_artifact.domain.User;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import javax.persistence.EntityManager;
import javax.swing.text.html.Option;
import java.util.List;
import java.util.Optional;
@Repository
@RequiredArgsConstructor
public class BasketRepository {
private final EntityManager em;
public void save(Basket basket) {
em.persist(basket);
}
public List<Basket> findAllByUser(User user) {
return em.createQuery("select b from Basket b where b.user = :user", Basket.class)
.setParameter("user", user)
.getResultList();
}
public Basket findById(Long id) {
return em.find(Basket.class, id);
}
public Optional<Basket> findOneByItemAndUser(User user, Item item) {
return em.createQuery("select b from Basket b where b.user = :user and b.item = :item", Basket.class)
.setParameter("user", user)
.setParameter("item", item)
.getResultList()
.stream().findFirst();
}
public void delete(Basket basket){
em.remove(basket);
}
}
원래 코드는 위 그림과 같이 대략 40줄이였지만 스프링 데이터 JPA를 통해 아래와 같이 3줄로 줄였다.
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.List;
import java.util.Optional;
public interface BasketDataRepository extends JpaRepository<Basket, Long> {
Optional<Basket> findOneByUserAndItem(User user, Item item);
List<Basket> findAllByUser(User user);
Optional<Basket> findById(Long basketId);
}
'웹 개발 > 맨땅에 헤딩 프로젝트' 카테고리의 다른 글
[스프링] AWS ec2 웹서버 띄우기 (0) | 2022.06.27 |
---|---|
Querydsl을 통한 동적 쿼리 (0) | 2022.05.23 |
주문기능 추가 (0) | 2022.04.24 |
Lazy Initialization Exception 해결 (0) | 2022.03.09 |
장바구니 기능 추가 (0) | 2022.03.04 |
댓글