728x90
1.BooleanBuilder
public List<Member> dynamicQuery_BooleanBuilder(){
String usernameParam = "member1";
Integer ageParam = null;
List<Member> result = searchMember1(usernameParam,ageParam);
return result;
}
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();
}
BooleanBuilder를 선언 한 후 파라미터의 값에 따라 BooleanBuilder에 조건을 추가하여 where의 값에 넣어주면 동적쿼리를 쓸 수 있다.
2.Where 다중 파라미터 사용
public List<Member> dynamicQuery_param(){
String usernameParam = "member1";
Integer ageParam = null;
List<Member> result = searchMember2(usernameParam,ageParam);
return result
}
private List<Member> searchMember2(String usernameCond, Integer ageCond) {
return queryFactory
.selectFrom(member)
// .where(usernameEq(usernameCond),ageEq(ageCond))
.where(allEq(usernameCond,ageCond))
.fetch();
}
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;
}
private BooleanExpression allEq(String usernameCond,Integer ageCond){
return usernameEq(usernameCond).and(ageEq(ageCond));
}
where 조건에 null이 들어가면 무시되는 것을 이용한다.
BooleanExpression을 반환하는 메서드를 조합하여 재사용이 가능하다.
쿼리자체의 가독성이 높아진다.
728x90
'Spring' 카테고리의 다른 글
javaMailSender를 이용한 이메일 인증(Naver) (0) | 2023.05.09 |
---|---|
Querydsl 페이징과 카운터쿼리 최적화 (0) | 2023.04.27 |
Querydsl 프로젝션 결과 반환 (0) | 2023.04.26 |
Querydsl gradle 설정 (0) | 2023.04.26 |
Auditing기능을 이용한 등록일,수정일,등록자,수정자 관리 (0) | 2023.04.18 |