Querydsl에서 동적 쿼리를 처리하는 방식은 크게 두가지이다.
1. BooleanBuilder
user이름과 나이를 가지고 검색을하는 쿼리를 만들고 싶으면,
null인지 아닌지 체크하고 builder에 값을넣고, where 절에서 builder을 사용하면 된다.
사용자 이름이 있을땐 검색하고, age가 없을떈 하고.. 뭐 이런느낌으로.
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 다중 파라미터 사용
private List<Member> searchMember2(String usernameCond, Integer ageCond) {
return queryFactory
.selectFrom(member)
.where(usernameEq(usernameCond),ageEq(ageCond))
.fetch();
}
private Predicate usernameEq(String usernameCond) {
return usernameCond == null ? null : member.username.eq(usernameCond);
}
private Predicate ageEq(Integer ageCond) {
return ageCond == null ? null : member.age.eq(ageCond);
}
함수를 더 만들어야하지만, 깔끔하게 눈에 보기쉽다.
null로 들어왔을때는 그 부분의 where은 무시된다.
장점 : -> 이러한 조건들이 "조합" 이 됨.!!
'TIL' 카테고리의 다른 글
stream 과 for문의 속도차이 , 병렬스트림이란. (0) | 2022.08.24 |
---|---|
StringUtils.hasText (0) | 2022.08.23 |
220823 Query _ FetchOne, FetchFrist.. (0) | 2022.08.23 |
220822 JPQL, querydsl (0) | 2022.08.22 |
220819 @Transient , Stream에 대해 (2) | 2022.08.19 |