본문 바로가기
Spring/JPA

Where 다중 파라미터 사용 - 동적쿼리

by YoonJong 2022. 10. 12.
728x90

동적쿼리를 다룰 수 있는 방법 2번째이다.

첫번째는 BooleanBuilder를 사용한 방법이였다. 

 

//Where 다중 파라미터 사용
@Test
void 동적쿼리_whereParam() {
    String username = "member1";
    Integer ageParam = 10;

    List<Member> result = searchMember2(username, ageParam);
    assertThat(result.size()).isEqualTo(1);
}

 

searchMember2 메서드를 확인해보면 아래와 같다.

// 메서드 명으로 쉽게 의도를 알아차릴 수 있다.
private List<Member> searchMember2(String usernameCond, Integer ageCond) {
    return queryFactory
            .selectFrom(member)
            .where(usernameEq(usernameCond), ageEq(ageCond)) // where 의 null 은 무시된다.
            .fetch();
}

where 절을 보면 usernameEq 과 ageEq 메서드를 추가로 생성하는 것을 볼 수 있다. 

 

메서드로 따로 빼서만드는 방식을 사용하면 가장 큰 장점 2가지

1. 메서드명을 잘 선택해 지으면 쉽게 의도를 파악할 수 있다.

2. 다른 쿼리에서 재사용이 가능하다.

 

두 메서드 모두 null 값을 처리해주어야 하므로, 삼항연산자를 통해 작성했다.

private Predicate usernameEq(String usernameCond) {
    return usernameCond != null ? member.username.eq(usernameCond) : null;
}
private Predicate ageEq(Integer ageCond) {
    return ageCond != null ? member.age.eq(ageCond) : null;
}

 

username 과 age 둘다 값이 있으면 쿼리에서는 where 절이 2번 나간다.

age가 null 일경우에는 where  절이 1번 나가는 것을 확인할 수 있다.

728x90

댓글