거인의 코딩일지
[JPA_Query DSL] BooleanBuilder, BooleanExpression 차이 본문
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 |