-
Querydsl - BooleanBuilder 이용한 동적 쿼리Spring/Querydsl 2022. 3. 25. 14:19728x90반응형
BooleanBuilder 사용한 동적 쿼리
BooleanBuilder를 사용하면 동적 쿼리를 사용할 수 있다. where 절에서 사용하는 데이터 값이 null 일 경우 조건을 제외시킬 수 있어 동적 쿼리를 만들기 편리하다.
@Test @DisplayName("BooleanBuilder를 이용한 동적쿼리") public void dynamicQuery_BooleanBuilder() { String usernameParam = "member1"; Integer ageParam = 10; List<Member> result = searchMember1(usernameParam, ageParam); assertThat(result.size()).isEqualTo(1); } private List<Member> searchMember1(String usernameCond, Integer ageCond) { // 여기서 중요한 것은 넘어온 파라미터 값이 null이면 검색 조건에 안들어가는 것 // 필수 값일 경우 BooleanBuilder에 파라미터로 넘겨주면 된다. 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(); }
/* select member1 from Member member1 where member1.username = ?1 and member1.age = ?2 */ select member0_.member_id as member_id1_1_, member0_.age as age2_1_, member0_.team_id as team_id4_1_, member0_.username as username3_1_ from member member0_ where member0_.username=? and member0_.age=?
위 쿼리를 보면 usernameCond와 ageCond 값이 null 아니므로 정상적으로 where조건에 포함된 것을 볼 수 있다. 만약 null일 경우에는 where 조건에 포함되지 않는다.
@Test @DisplayName("BooleanBuilder를 이용한 동적쿼리") public void dynamicQuery_BooleanBuilder() { String usernameParam = "member1"; Integer ageParam = null; // null로 변경 List<Member> result = searchMember1(usernameParam, ageParam); assertThat(result.size()).isEqualTo(1); }
/* select member1 from Member member1 where member1.username = ?1 */ select member0_.member_id as member_id1_1_, member0_.age as age2_1_, member0_.team_id as team_id4_1_, member0_.username as username3_1_ from member member0_ where member0_.username=?
위 쿼리를 보면 ageCond가 null이므로 검색조건에서 제외된 것을 볼 수 있다.
728x90반응형'Spring > Querydsl' 카테고리의 다른 글
Querydsl - 수정, 삭제 벌크 연산 (0) 2022.03.25 Querydsl - where절을 이용한 동적 쿼리 (0) 2022.03.25 Querydsl - DTO로 조회하기 (0) 2022.03.25 Querydsl - 프로젝션에 따른 결과 반환 (0) 2022.03.25 Querydsl - Querydsl 기본 문법 (0) 2022.03.23