728x90
쿼리 조건 설정인 where 뒤에 조건을 추가해줄 때 사용한다.
// 동적쿼리
@Test
void dynamicQuery_BooleanBuilder() {
String username = "member1";
Integer ageParam = 10;
List<Member> result = searchMember1(username,ageParam);
assertThat(result.size()).isEqualTo(1);
}
username 이 member1 , age 가 10 인 회원을 찾는다고 할때,
위와 같이 searchMember1 이라는 메소드를 생성해 작성할 수 있다.
searchMember1 메소드는 아래와 같다.
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 를 생성한다.
- if 조건문을 생성
- 만약 username 이 null 값이 아니면 builder 에 추가
- 만약 age 가 null 값이 아니면 builder에 추가 - 조건에 따라 쿼리문에 있는 where 절이 바뀐다.
생성된 쿼리를 보면 두 조건이 모두 null 이 아니므로 where 절이 2번 있는 것을 볼 수 있다.
age를 null 값으로 변경하고 실행하면??
@Test
void dynamicQuery_BooleanBuilder() {
String username = "member1";
Integer ageParam = null;
...
where 절에 username 만 생성된 것을 볼 수 있다.
728x90
'Spring > JPA' 카테고리의 다른 글
@OneToOne 는 1:1 을 보장하지않는다 + unique 제약조건 (0) | 2022.10.17 |
---|---|
Where 다중 파라미터 사용 - 동적쿼리 (0) | 2022.10.12 |
JPQL 과 QueryDsl 의 차이 (기초) (0) | 2022.10.09 |
Querydsl 설정 (0) | 2022.10.09 |
쿼리메소드 - 정렬처리 (0) | 2022.10.09 |
댓글