- ProductRepository에 쿼리 메서드 생성
List<Product> findByNameContainingIgnoreCase(String keyword)
리포지토리 메서드의 생성 규칙
FindBy : SQL문의 where절 역할을 수행하는 구문이다. findby 뒤에 엔티티의 필드값을 입력
(Is)Containing(=Contains) : 칼럼값에서 일부 일치 여부를 확인하는 조건자 키워드이다. SQL쿼리문에서 값의 일부를 포함하는 값을 추출할 때 사용하는 '%' 키워드와 동일한 역할을 하는 키워드이다.
IgnoreCase : 쿼리 일치가 대소문자를 구분하지 않도록 한다.
- 입력으로 받은 keyword를 사용하여 상품 이름을 검색하는 메서드 구현
List<ProductResponseDto> searchProductsByName(String keyword)
{
LOGGER.info("[searchProductsByName] keyword : {}", keyword);
List<Product> foundProducts = productRepository.findByNameContainingIgnoreCase(keyword);
List<ProductResponseDto> productResponseDtos = foundProducts.stream()
.map(product -> {
ProductResponseDto productResponseDto = new ProductResponseDto();
productResponseDto.setNumber(product.getNumber());
productResponseDto.setName(product.getName());
productResponseDto.setPrice(product.getPrice());
productResponseDto.setStock(product.getStock());
return productResponseDto;
})
.collect(Collectors.toList());
return productResponseDtos;
}
@Override: 이 메서드가 인터페이스나 상위 클래스의 메서드를 오버라이드(재정의)함을 나타냅니다.
public List<ProductResponseDto> searchProductsByName(String keyword):
String keyword: 검색할 상품 이름에 포함될 키워드를 전달받습니다.
List<ProductResponseDto>: 검색 결과로 반환할 상품 목록을 담은 리스트를 반환합니다.
LOGGER.info("[searchProductsByName] keyword : {}", keyword);:
검색 키워드를 로그에 기록합니다. 이를 통해 메서드가 어떤 키워드로 호출되었는지 확인할 수 있습니다.
List<Product> foundProducts = productRepository.findByNameContainingIgnoreCase(keyword);:
productRepository.findByNameContainingIgnoreCase(keyword): JPA ProductRepository를 이용하여 상품명에서 키워드를 포함한 상품들을 검색합니다.
List<Product>: 검색 결과로 얻은 Product 엔티티들을 담은 리스트를 반환합니다.
List<ProductResponseDto> productResponseDtos = foundProducts.stream() ... collect(Collectors.toList());:
검색된 상품 엔티티들을 ProductResponseDto로 변환하여 새로운 리스트인 productResponseDtos를 생성합니다.
foundProducts.stream(): foundProducts 리스트를 스트림으로 변환하여 각 요소에 대해 변환 작업을 수행합니다.
map(product -> { ... }): 각 상품 엔티티를 ProductResponseDto로 변환하는 작업을 수행합니다. 상품 엔티티의 필드 값을 ProductResponseDto에 대응하는 필드에 설정합니다.
collect(Collectors.toList()): 변환된 ProductResponseDto들을 리스트로 수집합니다.
return productResponseDtos;: 변환된 ProductResponseDto 목록을 반환합니다. 이렇게 함으로써 검색된 상품들의 정보를 클라이언트에게 전달할 수 있습니다.
3.상품을 검색하는 기능을 제공하는 HTTP GET 요청 핸들러 메서드 구현
@GetMapping("/search")
public ResponseEntity<List<ProductResponseDto>> searchProducts(@RequestParam String keyword) {
List'<'ProductResponseDto'>' products = productService.searchProductsByName(keyword);
return ResponseEntity.status(HttpStatus.OK).body(products);
}
@GetMapping("/search"):
HTTP GET 요청을 처리하는 핸들러 메서드를 지정합니다.
클라이언트에서 /product/search 경로로 GET 요청이 오면 이 메서드가 실행됩니다.
public ResponseEntity<List<'ProductResponseDto>> searchProducts(@RequestParam String keyword):
@RequestParam String keyword: 요청 파라미터 중 keyword 값을 받아옵니다. 클라이언트에서 keyword라는 이름으로 파라미터를 전달해야 합니다.
ResponseEntity<List<ProductResponseDto'>>: HTTP 응답을 생성하는 객체입니다. List<ProductResponseDto'> 타입의 상품 목록을 응답 본문에 담아서 반환합니다.
List<ProductResponseDto'> products = productService.searchProductsByName(keyword);:
productService.searchProductsByName(keyword)를 호출하여 상품 검색 기능을 수행합니다.
keyword를 사용하여 상품 이름을 검색하고, 검색된 상품들을 List<ProductResponseDto'> 형태로 받아옵니다.
return ResponseEntity.status(HttpStatus.OK).body(products);:
검색된 상품들을 HTTP 응답으로 반환합니다.
HttpStatus.OK는 200 OK 응답 코드를 나타냅니다. 즉, 요청이 성공적으로 처리되었음을 의미합니다.
body(products): 검색된 상품들을 응답 본문에 담아서 반환합니다. 이렇게 함으로써 클라이언트는 검색 결과를 받을 수 있습니다.
코드를 입력하세요
많은 도움이 되었습니다, 감사합니다.