단순 select문이 아닌 복잡한 쿼리문을 사용하기 위해 @Query 어노테이션을 통해 쿼리를 작성해보겠다.
@Query 어노테이션으로 직접 쿼리를 작성
- 단순 쿼리가 아니라서 JpaRepository가 자동으로 만들어줄 수 없을 때 사용
- DB의 표준쿼리와 차이가 있음(Java Entity와 일치)
/repository/BoardRepository.java, findAllByKeyword() 메서드 추가
@Query("select distinct b " +
" from Board b " +
" left join Reply r on r.board = b " +
" where b.title like %:kw% " +
" or b.content like %:kw% " +
" or r.content like %:kw% ")
Page<Board> findAllByKeyword(@Param("kw") String kw, Pageable pageable);
- 위의 메서드들은 entity가 존재했기 때문에 동작을 했으나, keyword의 경우 entity에 존재하지 않기 때문에 @Query 어노테이션을 붙여줘야 함
/service/BoardService.java getList() 메서드 return 부분 수정
public Page<Board> getList(int page, String keyword) {
List<Sort.Order> sorts = new ArrayList<>();
sorts.add(Sort.Order.desc("createDate"));
Pageable pageable = PageRequest.of(page, 10, Sort.by(sorts)); // pageSize를 동적으로도 변경할 수 있음. 나중에...
// Specification<Board> spec = searchBoard(keyword);
// return this.boardRepository.findAll(spec, pageable);
return this.boardRepository.findAllByKeyword(keyword, pageable);
}
- 금방 BoardRepository.java에서 만든findAllByKeyword()를 사용
- Specification을 사용해서 검색기능을 구현한 것과 동일한 결과가 나옴
'Spring Boot > STUDY' 카테고리의 다른 글
[Spring Boot] JPA 프로젝트 - 카테고리 추가 (0) | 2024.06.25 |
---|---|
[Spring Boot] JPA 프로젝트 - 마크다운 적용 (1) | 2024.06.25 |
[Spring Boot] JPA 프로젝트 - Specification 인터페이스를 사용한 검색 기능 구현(1) (0) | 2024.06.24 |
[Spring Boot] JPA 프로젝트 - 앵커 기능 구현 (0) | 2024.06.24 |
[Spring Boot] JPA 프로젝트 - 수정 기능 구현 (0) | 2024.06.24 |