728x90
동적 쿼리를 해결하는 두가지 방식
- BooleanBuilder
- Where 다중 파라미터 사용
BooleanBuilder
- 초기값을 지정 할 수도 있음
@Test
public void dynamicQuery_BooleanBuilder() throws Exception {
String usernameParam = "member1";
Integer ageParam = 10;
List<Member> result = searchMember1(usernameParam, ageParam);
Assertions.assertThat(result.size()).isEqualTo(1);
}
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 다중 파라미터
- BooleanExpression을 반환타입으로
- where 조건에 null 값은 무시된다.
- 메서드를 다른 쿼리에서도 재활용 할 수 있다.
- 쿼리 자체의 가독성이 높아진다.
@Test
public void dynamicQuery_WhereParam() throws Exception {
String usernameParam = "member1";
Integer ageParam = 10;
List<Member> result = searchMember2(usernameParam, ageParam);
Assertions.assertThat(result.size()).isEqualTo(1);
}
private List<Member> searchMember2(String usernameCond, Integer ageCond) {
return queryFactory
.selectFrom(member)
.where(usernameEq(usernameCond), ageEq(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;
}
728x90
'💻dev > 🌱Java+Spring' 카테고리의 다른 글
Querydsl | 동적 쿼리와 성능 최적화 조회 - Builder, Where절 파라미터 (0) | 2023.05.17 |
---|---|
Querydsl | 수정, 삭제 벌크 연산하기 (0) | 2023.05.16 |
Querydsl | 결과 반환: 프로젝션, DTO, @QueryProjection (0) | 2023.05.16 |
Querydsl | 쿼리dsl의 기본 문법(설명 추가 예정) (0) | 2023.05.16 |
Spring Data JPA | 네이티브 쿼리 (0) | 2023.05.12 |