우리가 생각해볼 상황은 다음과 같다. 5개의 팀이 있고 1번팀, 2번팀, 3번팀이 사용한 지출내역이 필요할때 과연 JPA에서는 어떻게 해야 해당 정보를 불러올 수 있을까? 우리는 이러한 문제를 해결하기 위해 sql에서 사용되는 in 절을 JPA로 사용해볼 것 이다.
그룹마다의 게시글이 있고 우리가 클라이언트에게 요청받은건 1번 그룹 게시글의 전체 정보라 했을때 우리는 아래와 같이 JPA를 사용할 수 있다.
List<Board> findByGroupId(Long groupId);
만약 클라이언트가 1,2,5번의 그룹 게시글의 전체 정보를 요청하였다면, 해당 쿼리의 파라미터는 그룹의 Id 하나이기 때문에 해당 쿼리로 전체를 가져오는 것은 무리다. 그렇기에 우리는 JPA에서 IN절을 사용하여 요청받은 그룹들의 게시글의 전체 정보를 가져올 것이다.
IN절 : WHERE 절 내에서 특정값 여러개를 선택하는 SQL 연산자 (OR연산자의 함축버전)
우리는 1,2,5번 그룹의 게시글 전체 정보를 가져오기위해 아래와 같이 JPA를 사용할 수 있다.
List<Board> findByGroupIdIn(List<Long> groupId);
In절을 사용하여 파라미터 값을 list 형태로 JPA를 사용할 수 있다, 이러한 로직을 사용하기 위한 예시는 아래와 같다.
@GetMapping("ex")
public CustomResponseEntity<List<예시>> ex(
@RequestParam final List<Long> groupId
) {
return boardService.ex(groupId);
}
위와 같이 Controller를 구성하여 @RequestParam 값을 리스트 형태로 전달받으면
서비스 클래스에서 받은 groupId 리스트를 findByGroupIdIn(groupId) 으로 가져올 수 있다.
어려운건 아니지만 JPA에서 여러 파라미터로 하나의 정보를 가져오고 싶을때 유용하게 사용할 수 있으니 적극 활용해보는것도 좋다 🥹