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() 함수를 바로 사용할 수 있다.
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)
💡 아래 부터는 API로 까지는 구현하진 않아도 됩니다. 요구사항에 맞는 상품 리스트를 조회하는 메소드를 jpa에 선언하고고, 테스트만 해보세요.JPA 인터페이스 내에서 구현 없이 선언만 해주면 선언한 메소드 이름으로 적절한 JPQL쿼리를 생성해서 실행해주는 아주 편리한 기능 을 활용해보기 위한 미션입니다. JPA 인터페이스 내 메소드의 이름을 통해서 아래 요구사항을 만족하는 기능을 구현해봅시다!
api/products?price=1000
으로 요청하면price
가 1000원인 상품들 리스트를name
을 기준으로 정렬해서 조회하세요.
name
기준 내림차순 정렬api/products?name=모니터&price=1000
으로 요청했을 때 요청된 name과 price값을 모두 만족(and)하는 상품 리스트를 조회하세요.
단순 메소드 이름 뿐만 아니라 @Query
어노테이션이 필요할 수 있습니다. 아래 블로그를 참고해주세요. @Query
어노테이션을 활용한 조회도 꼭 해보시길 바랍니다!
[Spring Data JPA] JPQL 사용 방법(@Query & nativeQuery & DTO Mapping & function)
이제 블로그 글을 쓰면서 ‘기록하는 습관’을 들여볼겁니다. 블로그 글에 작성해야 되는 내용은 아래와 같습니다.
배운 내용, 깨달은 점
어려웠던 점, 반성하고 싶은 점 / 개선할 방법
궁금한 점