오늘은 쇼핑몰 프로젝트 검색기능에서 다중 키워드 검색하는 기능을 추가해보았다.
코드는 구리지만 일단 돌아가게만 만들었다.
넘겨 받는 키워드는 스페이스바를 기준으로 하여 배열로 분리하였고,
OR 조건으로 하여 각 단어가 들어있는 모든 아이템을 찾아주도록 하였다.
String[] keywordArr = keyword.split(" ");
// 스페이스 기준으로 keyword 분리
JPA repository에 OR 조건으로 찾는 기능도 있었지만,
해당 기능은 키워드 개수가 정해져 있어야 가능한 부분 같아 쓰지 않기로 했다.
OR 조건 이므로 각 키워드 만큼 레파지토리를 검색하고, 중복 제거를 해주었다.
//분리된 키워드는 OR 조건으로 검색됨
List<Seller> sellerList = new ArrayList<>();
for (String key : keywordArr) {
List<Seller> sellerRepoTemp = switch (searchOption) {
case "이름" -> sellerRepository.findAllBySellerNameContainsIgnoreCase(key);
case "별명" -> sellerRepository.findAllByNicknameContainsIgnoreCase(key);
case "이메일" -> sellerRepository.findAllByEmailContainsIgnoreCase(key);
case "이름별명" -> sellerRepository.findAllBySellerNameContainsIgnoreCaseOrNicknameContainsIgnoreCase(key, key);
default -> sellerRepository.findAll();
};
sellerList.addAll(sellerRepoTemp);
}
중복 제거는 stream의 distinct()를 이용.
return sellerPage.stream()
.distinct()//중복제거
.map(SellerListResponseDto::new)
.collect(Collectors.toList());
끗
'개발 일지 > [스파르타] 내일배움캠프 4기' 카테고리의 다른 글
| [TIL/내배캠] 61일차 - 2023.01.25 (0) | 2023.01.27 |
|---|---|
| [WIL/내배캠] 12주차 - 2023.01.20 (0) | 2023.01.27 |
| [TIL/내배캠] 57일차 - 2023.01.17 Incompatible 에러(2) (0) | 2023.01.20 |
| [TIL/내배캠] 56일차 - 2023.01.16 - 중간프로젝트 시작 (0) | 2023.01.17 |
| [WIL/내배캠] 11주차 - 2023.01.13 (0) | 2023.01.16 |