728x90
동적쿼리를 다룰 수 있는 방법 2번째이다.
첫번째는 BooleanBuilder를 사용한 방법이였다.
//Where 다중 파라미터 사용
@Test
void 동적쿼리_whereParam() {
String username = "member1";
Integer ageParam = 10;
List<Member> result = searchMember2(username, ageParam);
assertThat(result.size()).isEqualTo(1);
}
searchMember2 메서드를 확인해보면 아래와 같다.
// 메서드 명으로 쉽게 의도를 알아차릴 수 있다.
private List<Member> searchMember2(String usernameCond, Integer ageCond) {
return queryFactory
.selectFrom(member)
.where(usernameEq(usernameCond), ageEq(ageCond)) // where 의 null 은 무시된다.
.fetch();
}
where 절을 보면 usernameEq 과 ageEq 메서드를 추가로 생성하는 것을 볼 수 있다.
메서드로 따로 빼서만드는 방식을 사용하면 가장 큰 장점 2가지
1. 메서드명을 잘 선택해 지으면 쉽게 의도를 파악할 수 있다.
2. 다른 쿼리에서 재사용이 가능하다.
두 메서드 모두 null 값을 처리해주어야 하므로, 삼항연산자를 통해 작성했다.
private Predicate usernameEq(String usernameCond) {
return usernameCond != null ? member.username.eq(usernameCond) : null;
}
private Predicate ageEq(Integer ageCond) {
return ageCond != null ? member.age.eq(ageCond) : null;
}
username 과 age 둘다 값이 있으면 쿼리에서는 where 절이 2번 나간다.
age가 null 일경우에는 where 절이 1번 나가는 것을 확인할 수 있다.
728x90
'Spring > JPA' 카테고리의 다른 글
data.sql 적용하기 (스프링부트 버전 2.7.x 이상 ) (0) | 2022.11.10 |
---|---|
@OneToOne 는 1:1 을 보장하지않는다 + unique 제약조건 (0) | 2022.10.17 |
BooleanBuilder - 동적 쿼리 (0) | 2022.10.12 |
JPQL 과 QueryDsl 의 차이 (기초) (0) | 2022.10.09 |
Querydsl 설정 (0) | 2022.10.09 |
댓글