[QueryDSL] BooleanExpression을 통한 동적쿼리
null인지 아닌지 확인해 Builder에 append하는 구조 (StringBuilder와 유사한 동작 방식)
쿼리문만으로 where 절의 조건을 확인하기 어려운 단점 존재
@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();
}
null 조건의 경우 무시 가능
모두 null일 경우 전체 Entity 가져오므로 주의
@Override
public List<Academy> findBynamicQuery(String name, String address, String phoneNumber){
return queryFactory
.selectFrom(academy)
**.where(eqName(name),
eqAddress(address),
eqPhoneNumber(phoneNumber))**
.fetch();
}
private BooleanExpression eqName(String name){
if(StringUtils.isEmpty(name)){
return null;
}
return academy.name.eq(name);
}
private BooleanExpression eqAddress(String address){
if(StringUtils.isEmpty(address)){
return null;
}
return academy.address.eq(address);
}
innerjoin() 추가