본문 바로가기
백엔드/Spring

[spring] querydsl 동적쿼리

by 작은소행성 2021. 9. 10.

동적쿼리가 필요한 상황에서 querydsl을 사용하면 쉽게 해결 가능하다. 

 

 

 

BooleanBuilder

 

BooleanBuilder를 이용해서 조건들을 이어붙여 where 문에 넣어주는 방식이다

and , or 사용

 

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();
}

 

 

 

 

 

where 다중 파라메터 사용 (BooleanExpression)

 

BooleanExpression 타입을 리턴하는 매서드를 만들어 조건을 추가하는 방식이다. 

매세드로 만들어 사용하기 때문에 어떤 조건인지 명확히 알 수 있고 재사용도 가능하다. 

 

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

     return queryFactory
          .selectFrom(member)
          .where(usernameEq(usernameCond),ageEq(ageCond))
          .fetch();
}

// 결과가 null 이면 where()에서 무시된다.
private BooleanExpression usernameEq(String usernameCond) {
    return usernameCond != null ? member.username.eq(usernameCond) : null;
}

private BooleanExpression ageEq(Integer ageCond) {
    return ageCond != null ? member.age.eq(ageCond) : null;
}

 

 

 

 

참고

https://velog.io/@aidenshin/Querydsl-%EB%8F%99%EC%A0%81-%EC%BF%BC%EB%A6%AC

 

 

 

반응형