공부 자료

6회차 미션

✅  예제, 연습문제 구현하기


public interface ProductJpaRepository extends JpaRepository<ProductEntity, Long> {

}

JpaRepository를 상속받아 엔티티 타입과 PK 타입을 지정해주면 spring data jpa로 쉽게 jpa를 이용할 수 있다.

  • 상품 전체 조회
    public List<ProductResponse> findAll(){
        return productJpaRepository.findAll().stream()
                .map(p -> ProductResponse.from(p))
                .collect(Collectors.toList());
    }

만든 인터페이스 타입으로 빈을 주입 받으면, findAll() 함수를 바로 사용할 수 있다.



  • 상품 등록 api를 구현하는 예제
    public Long save(SaveProductRequest saveProductRequest) {
        ProductEntity productEntity = .....
        ProductEntity saveProduct = productJpaRepository.save(productEntity);
        return saveProduct.getId();

    }

findAll() 과 마찬가지로 save(entity)로 상품등록을 할 수 있다.




✅  상품 상세조회 구현하기

api/products?id=1 로 요청하면 id가 1인 상품을 데이터베이스 테이블에서 찾아서 리턴하는 api를 구현해보세요.

    public ProductResponse findOneById(Long id) {
        ProductEntity findProduct = productJpaRepository.findById(id).get();
        return ProductResponse.from(findProduct);
    }




✅  (심화) 이름으로 상품 상세조회 구현하기

api/products?name=모니터 와 같이 요청하면 해당 name을 가진 상품을 데이터베이스 테이블에서 찾아서 리턴하는 api를 구현해보세요.

key값으로 찾는 find가 아니라면 ProductJpaRepository에서 함수를 선언해줘야 합니다.
JPA 인터페이스 내에서 구현 없이 선언만 해주면 선언한 메소드 이름으로 적절한 JPQL쿼리를 생성해서 실행해주는 아주 편리한 기능을 탑재하고 있습니다.

Optional<ProductEntity> findByName(String name);

다음 코드를 ProductJpaRepository에 선언해주면 된다.

    public ProductResponse findOneByName(String name) {
        ProductEntity findProduct = productJpaRepository.findByName(name).get();
        return ProductResponse.from(findProduct);
    }

그럼 자동으로 name으로 entity를 찾아오는 함수 findByName()을 사용할 수 있다.
이게 되는 이유는 다음 글을 참고하자.
Spring Data JPA 는 어떻게 interface 만으로도 동작할까? (feat. reflection, proxy)




✅ (심화) 요구사항 만족하는 상품 조회 메소드 구현하기 (추후에 진행할 예정..)

JPA 인터페이스 내에서 구현 없이 선언만 해주면 선언한 메소드 이름으로 적절한 JPQL쿼리를 생성해서 실행해주는 아주 편리한 기능 을 활용해보기 위한 미션입니다. JPA 인터페이스 내 메소드의 이름을 통해서 아래 요구사항을 만족하는 기능을 구현해봅시다!

  • api/products?price=1000 으로 요청하면 price가 1000원인 상품들 리스트를 name을 기준으로 정렬해서 조회하세요.
    • name 기준 내림차순 정렬
  • api/products?name=모니터&price=1000 으로 요청했을 때 요청된 name과 price값을 모두 만족(and)하는 상품 리스트를 조회하세요.
💡 아래 부터는 API로 까지는 구현하진 않아도 됩니다. 요구사항에 맞는 상품 리스트를 조회하는 메소드를 jpa에 선언하고고, 테스트만 해보세요.

단순 메소드 이름 뿐만 아니라 @Query 어노테이션이 필요할 수 있습니다. 아래 블로그를 참고해주세요. @Query 어노테이션을 활용한 조회도 꼭 해보시길 바랍니다!

[Spring Data JPA] JPQL 사용 방법(@Query & nativeQuery & DTO Mapping & function)

  • 전체 상품을 조회하는데, name이 모니터인 상품은 무시
  • 가장 가격이 비싼 상품 조회하기
  • 이름에 “컴”을 포함하는 상품 조회하기
  • 가장 가격이 저렴한 상품의 ‘이름만’ 조회하기
  • 상품 가격의 평균 구하기




✅ 블로그 글 쓰기

이제 블로그 글을 쓰면서 ‘기록하는 습관’을 들여볼겁니다. 블로그 글에 작성해야 되는 내용은 아래와 같습니다.

  • 배운 내용, 깨달은 점

    • spring data jpa 사용해보기
  • 어려웠던 점, 반성하고 싶은 점 / 개선할 방법

    • spring을 처음 접한지 꽤 되었는데, spring data jpa를 사용해본 적이 없었다. 앞으로 더 공부해서 사용해봐야겠다.
    • 심화 미션을 하지 못한 게 아쉽다 ㅜㅜ
    • spring data jpa의 동작원리 아티클 꼭 내일 읽자... 진짜로
  • 궁금한 점

    • 없습니다!
profile
진짜를 알면 곁가지를 몰라도 된다

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN