@Test
void search() {
Member findMember = queryFactory
.selectFrom(member)
.where(member.username.eq("member1")
.and(member.age.eq(10)))
.fetchOne();
assertThat(findMember.getUsername()).isEqualTo("member1");
}
.and()
, .or()
를 메서드 체인으로 연결할 수 있습니다.select
, from
을 selectFrom
으로 합칠 수 있습니다.테스트 코드를 실행하면 and 쿼리가 나가는 것을 확인할 수 있습니다.
AND 조건을 메서드 체이닝 말고 파라미터로 받을 수 있습니다. where() 는 파라미터를 여러개 받을 수 있도록 지원합니다.
@Test
public void searchAndParam() {
List<Member> result1 = queryFactory
.selectFrom(member)
.where(member.username.eq("member1"),
member.age.eq(10))
.fetch();
assertThat(result1.size()).isEqualTo(1);
}
메서드 체이닝을 써도 괜찮고 파라미터로 받아도 괜찮습니다.
하지만 AND 조건만 있다면 파라미터로 받는 것을 선호합니다.
왜냐면 파라미터로 받을 때 null 이 들어가게 된다면 아예 무시하기 때문에 동적쿼리를 더 깔끔하게 작성할 수 있기 때문입니다.
→ 자세히