스프링부트 native query
2021. 4. 12. 02:14ㆍSpring Boot
반응형
검색어를 저장해주는 테이블을 만들고 그 테이블에서 상위 인기 검색어 10개를 뽑기 위해 native query를 사용했다.
jpa는 쿼리를 직접 짜지 않고 쿼리를 실행할 수 있는 장점이 있지만 group by 같은 문법을 활용하려면 조금 복잡해진다.
위와 같은 경우에 native query를 사용하지않고 자바단에서 처리할 수 있는 방법도 있을 수 있을텐데 쿼리를 사용하는게 훨씬 간단히 해결할 수 있을 거 같아 native query를 사용했다.
- Controller
/**
* 인기 검색어 조회 API
* [GET] /recipes/best-keyword
* @return BaseResponse<List<GetRecipesBestKeywordRes>>
*/
@GetMapping("/best-keyword")
public BaseResponse<List<GetRecipesBestKeywordRes>> getRecipesBestKeyword() {
try {
int jwtUserIdx = jwtService.getUserId();
List<GetRecipesBestKeywordRes> getRecipesBestKeywordRes = recipeKeywordProvider.retrieveRecipesBestKeyword();
return new BaseResponse<>(getRecipesBestKeywordRes);
} catch (BaseException exception) {
return new BaseResponse<>(exception.getStatus());
}
}
- Provider
/**
* 인기 검색어 조회 API
* @return List<GetRecipesBestKeywordRes>
* @throws BaseException
*/
public List<GetRecipesBestKeywordRes> retrieveRecipesBestKeyword() throws BaseException {
GetRecipesBestKeywordRes getRecipesBestKeywordRes;
List<Object[]> bestKeywordList;
try {
bestKeywordList = recipeKeywordRepository.findByBestKeywordTop10();
} catch (Exception ignored) {
throw new BaseException(FAILE_TO_GET_BEST_KEYWORD);
}
return bestKeywordList.stream().map(keyword -> {
String bestKeyword = String.valueOf(keyword[0].toString());
return new GetRecipesBestKeywordRes(bestKeyword);
}).collect(Collectors.toList());
}
- Repository
@Repository
public interface RecipeKeywordRepository extends CrudRepository<RecipeKeyword, Integer> {
@Query(value="select keyword,count(keyword) as keywordCount\n" +
"from RecipeKeyword\n" +
"where status = 'ACTIVE'\n" +
"group by keyword\n" +
"order by keywordCount desc limit 10;",nativeQuery = true)
List<Object[]> findByBestKeywordTop10();
}
- GetRecipesBestKeywordRes
@Getter
@AllArgsConstructor
public class GetRecipesBestKeywordRes {
private String bestKeyword;
}
<결과>
반응형
'Spring Boot' 카테고리의 다른 글
[java] Map value 정렬 (0) | 2021.04.10 |
---|---|
스프링부트 @Scheduled 사용 (0) | 2021.04.08 |
org.json.simple import 에러 (0) | 2021.04.05 |
[java] 리스트 선언, 리스트 null인지 확인 방법 (0) | 2021.03.30 |
[java] 두 날짜 사이 차이 계산 (0) | 2021.03.24 |