동적 쿼리

BooleanBuilder

@SpringBootTest
@Transactional
public class QuerydslBasicTest {

    @Test
    void dynamicQuery_BooleanBuilder() {
        String usernameParam = "member1";
        Integer ageParam = 10;

        List<Member> result = searchMember1(usernameParam, ageParam);
        Assertions.assertThat(result.size()).isEqualTo(1);
    }

    private List<Member> searchMember1(String usernameCondition, Integer ageCondition) {
        BooleanBuilder builder = new BooleanBuilder();

        // username에 값이 있으면 그 값으로 and 조건을 넣는다.
        if (usernameCondition != null) {
            builder.and(member.username.eq(usernameCondition));
        }

        // age에 값이 있으면 그 값으로 and 조건을 넣는다.
        if (ageCondition != null) {
            builder.and(member.age.eq(ageCondition));
        }

        return queryFactory
                .selectFrom(member)
                .where(builder)
                .fetch();
    }
}
  • username와 age를 조건으로 쿼리했다.

  • null이면 조건으로 넣지 않는다.

  • 빌더에 필수 값을 넣어서 초기화할 수도 있다.

where 다중 파라미터

  • where 조건에서 null 값은 무시된다.

  • 메서드를 다른 쿼리에서도 재사용할 수 있다.

  • 쿼리 자체의 가독성이 높아진다.

조합

  • username과 age에 대한 두 조건을 하나로 합쳐서 사용할 수 있다.

  • null 처리는 따로 해줘야 한다.

Last updated

Was this helpful?