별점 평균 동적 계산
@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% : 키워드를 포함한 모든 문자열을 검색 (와일드카드 '%'는 어떤 문자열이든 올 수 있음)
'Spring' 카테고리의 다른 글
[TIL] 240401 JWT토큰 (0) | 2024.04.03 |
---|---|
[TIL] 240328 Spring Data JPA , JpaAuditing, Query Method (0) | 2024.03.28 |
[TIL] 240204 코드 리뷰/프로젝트 복습 Category (0) | 2024.02.04 |
[TIL] 240203 WAS (0) | 2024.02.04 |
[TIL] 230201 N+1 문제 해결 Join fetch, BatchSize (0) | 2024.02.01 |