본문 바로가기
Spring

[TIL] 240205 코드 리뷰/프로젝트 복습 Product

by studymode 2024. 2. 5.

 

별점 평균 동적 계산

@Formula("(SELECT AVG(r.star) FROM reviews r WHERE r.product_id = id)")
private Double averageRating;

🔼 ProductEntity

-  @Formula : db의 데이터를 기반으로 값을 계산하는 sql표현식을 지정하게 하는 어노테이션

("(SELECT AVG(r.star) FROM reviews r WHERE r.product_id = id)") //averageRating을 계산하는 SQL표현식

-  averageRating 속성에 액세스 할 때마다 해당 값을 Hibernate이 db에서 관련 데이터를 기반으로 편균 평점을 동적으로 계산

 

 

상품 검색 쿼리

public Page<ProductResponseDto> getProductsBySearch(String keyword, Pageable pageable) {
  if (!StringUtils.hasText(keyword)) {
    throw new ApiException("검색어를 입력해주세요.", HttpStatus.BAD_REQUEST);
  }

  Page<Product> products = productRepository.findByKeyword(keyword, pageable);
  return products.map(ProductResponseDto::new);
}

🔼 ProductService

@Query("SELECT p FROM Product p WHERE p.name LIKE %:keyword% OR p.description LIKE %:keyword%")
Page<Product> findByKeyword(@Param("keyword") String keyword, Pageable pageable);

🔼 ProductRepository

 

-  JPQL을 사용하여 데이터베이스에서 데이터 조회 쿼리 정의

-  검색할 범위 (product.name, product.description)와 키워드 설정

-  LIKE %:keyword% : 키워드를 포함한 모든 문자열을 검색 (와일드카드 '%'는 어떤 문자열이든 올 수 있음)