본문 바로가기
Spring/JPA

BooleanBuilder - 동적 쿼리

by YoonJong 2022. 10. 12.
728x90

쿼리 조건 설정인 where 뒤에 조건을 추가해줄 때 사용한다.

 

// 동적쿼리
@Test
void dynamicQuery_BooleanBuilder() {
    String username = "member1";
    Integer ageParam = 10;

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

username 이 member1 , age 가 10 인 회원을 찾는다고 할때,

위와 같이 searchMember1 이라는 메소드를 생성해 작성할 수 있다.

 

searchMember1 메소드는 아래와 같다.

private List<Member> searchMember1(String usernameCond, Integer ageCond) {

    BooleanBuilder builder = new BooleanBuilder();
    if (usernameCond != null ) {
        builder.and(member.username.eq(usernameCond));
    }

    if (ageCond != null) {
        builder.and(member.age.eq(ageCond));
    }

    return queryFactory
            .selectFrom(member)
            .where(builder)
            .fetch();
}
  • BooleanBuilder 를 생성한다.
  • if 조건문을 생성
    - 만약 username 이 null 값이 아니면 builder 에 추가
    - 만약 age 가 null 값이 아니면 builder에 추가
  • 조건에 따라 쿼리문에 있는 where 절이 바뀐다.

 

생성된 쿼리를 보면 두 조건이 모두 null 이 아니므로 where 절이 2번 있는 것을 볼 수 있다.


age를 null 값으로 변경하고 실행하면??

@Test
void dynamicQuery_BooleanBuilder() {
    String username = "member1";
    Integer ageParam = null;
    ...

where 절에 username 만 생성된 것을 볼 수 있다.

728x90

댓글