Notice
Recent Posts
Recent Comments
Link
250x250
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags
more
Archives
Today
Total
관리 메뉴

거인의 코딩일지

[JPA_Query DSL] BooleanBuilder, BooleanExpression 차이 본문

코딩/JAVA

[JPA_Query DSL] BooleanBuilder, BooleanExpression 차이

코딩거인 2023. 9. 25. 09:29
728x90

BooleanBuilder
  • 일반적으로 동적 쿼리를 사용할 때 Boolean Builder 를 사용하지만 어떤 쿼리인지 바로 예측이 가지 않는다는 단점이 존재한다
  • BooleanExpression 의 member.age.eq(xx) 등의 표현식을 모아서 사용할 수 있도록 해준다
BooleanExpression
  • member.age.eq(xx) 과 같은 표현식을 의미한다
  • null 반환시 자동으로 조건절에서 제거된다
  • 단!!! 모든 조건이 null 발생시 전체 엔티티를 불러오게 되므로 오류를 발생할 수 있다.
// ex) BooleanBuilder
    @Override
    public List<Academy> findBynamicQuery(String name, String address, String phoneNumber){
        BooleanBuilder builder = new BooleanBuilder();

        if(!StringUtils.isEmpty(name)){
            builder.and(academy.name.eq(name));
        }
        if(!StringUtils.isEmpty(address)){
            builder.and(academy.address.eq(address));
        }
        if(!StringUtils.isEmpty(phoneNumber)){
            builder.and(academy.phoneNumber.eq(phoneNumber));
        }

        return queryFactory
               .selectFrom(academy)
               .where(builder)
               .fetch();
    }


// ex) BooleanExpression
    private BooleanExpression eq(StringPath source, String target) {
        if(StringUtils.isEmpty(target)){
            return null;
        }
        return source.eq(target);
    }
    /*
    이렇게 위에 선언해두고 사용하면 편하다.
    source 는 where 조건절에서 사용할 소스 이고 target는 where 조건절에서
    null 인지 확인하는 타겟이다.
    */

 

728x90

'코딩 > JAVA' 카테고리의 다른 글

[Annotation] @CrossOrigin 이란?  (0) 2023.09.25
[Query_DSL] Query_DSL 이란???  (0) 2023.09.25
[JPA] N+1 문제??  (2) 2023.08.31
[JPA] 영속성 컨텍스트란?  (0) 2023.08.24
선언적 트랜잭션? @Transctional? JPA? Proxy?  (0) 2023.08.24