본문 바로가기
웹 개발/맨땅에 헤딩 프로젝트

스프링 데이터 JPA 업그레이드 시작

by L3m0n S0ju 2022. 4. 26.

 

스프링 데이터 JPA 기능 사용

https://github.com/Lemon-soju/Java_Sping_Shop_Project_01/commit/2b0c90d516e8c02501c9c0f0dc2b3f2242ce2e22

 

Merge pull request #21 from Lemon-soju/slave-01 · Lemon-soju/Java_Sping_Shop_Project_01@2b0c90d

Fixed ItemRepository And UserRepository Upgrade By Spring Data JPA tech

github.com

 

이전에 스프링 JPA를 통해 구현한 코드 중 ItemRepository와 UserRepository를 스프링 데이터 JPA 기능을 이용해 코드를 줄였다. 다음에는 장바구니 기능을 다시 구현할 예정이다. 사용자들이 같은 장바구니를 사용하도록 설계되었는데 왜 그런 바보 같은 짓을 했는지 잘 모르겠지만 장바구니 기능을 다시 구현해서 가능하면 스프링 데이터 JPA로 깔끔하게 코드를 작성할 예정이다.

 

 

 

 

 

 

 

장바구니 오류 수정

https://github.com/Lemon-soju/Java_Sping_Shop_Project_01/commit/20676eb00cebeea00eb30140eb042ce5dbf41e16

 

Merge pull request #22 from Lemon-soju/slave-01 · Lemon-soju/Java_Sping_Shop_Project_01@20676eb

Fix Basket Function

github.com

공동 장바구니를 사용하는 것처럼 오류가 발생했었는데 세션에서 사용자 정보를 가져와서 사용자 간에 장바구니 분리를 통해 오류를 해결했다.

 

 

 

 

 

 

 

장바구니 레포지토리 코드 줄이기

 

https://github.com/Lemon-soju/Java_Sping_Shop_Project_01/commit/baf93fd5a3d8c1edd43eef50fd171f8ac1690ca9

 

Merge pull request #23 from Lemon-soju/slave-01 · Lemon-soju/Java_Sping_Shop_Project_01@baf93fd

Upgrade BasketRepository By Using Spring Data Jpa

github.com

 

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

댓글