[Querydsl] 9. 검색 조건 쿼리

민정·2023년 1월 9일

QueryDSL

목록 보기
9/18
post-thumbnail

✨ 검색 조건 쿼리

검색 조건 쿼리 : where절.and(), .or() 메서드 체이닝 사용

기본 구조

.select()
.from()
.where(조건1.and(조건2).or(조건3) ... )
.fetchOne();

참고

.select().from() = .selectFrom()

✅ 예시

이름이 member1이면서 나이가 10살인 사람 조회

    @Test
    public void search() {
        // 이름이 member1이면서 나이가 10살인 사람 조회

        Member findMember = queryFactory
                .selectFrom(member) // .select, .from을 합친 것
                .where(  // where 조건 추가: .and, .or로 체이닝해서 조건 추가 가능
                        member.username.eq("member1")
                        .and(member.age.eq(10))
                )
                .fetchOne();

        assertThat(findMember.getUsername()).isEqualTo("member1");
    }

✅ 쿼리 확인

where 절에 username과 age 조건이 and로 묶인 것을 확인할 수 있다.



✨ 다양한 검색 조건

1. 값 일치/불일치

일치 : eq()
불일치 : ne(), eq().not()

예시

member.username.eq("member1") // username = 'member1'
member.username.ne("member1") //username != 'member1'
member.username.eq("member1").not() // username != 'member1'

2. not null

isNotNull()

예시

member.username.isNotNull() //이름이 is not null

3. in, not in, between

in(), notIn(), between()

예시

member.age.in(10, 20) // age in (10,20)
member.age.notIn(10, 20) // age not in (10, 20)
member.age.between(10,30) //between 10, 30

4. 비교

  • >= : goe()
  • > : gt()
  • <= : loe()
  • < : lt()

참고

goe : greaterOrEqual
gt : greaterThan
loe : lowerOrEqual
lt : lowerThan

예시

member.age.goe(30) // age >= 30
member.age.gt(30) // age > 30
member.age.loe(30) // age <= 30
member.age.lt(30) // age < 30

5. like(문자열 포함 여부)

like : like() (주의: %를 직접 입력해줘야함 - 아래 예시 참고)
like %문자열% : .contains()
like 문자열% : .startsWith()

예시

member.username.like("member%") //like 검색
member.username.contains("member") // like ‘%member%’ 검색
member.username.startsWith("member") //like ‘member%’ 검색


✨ AND 조건을 파라미터로 처리

검색 조건 쿼리 작성시, where절에 param으로 여러개를 넘기면 and로 묶인다.

김영한 선생님은 and 조건만 있는 경우 이 방법을 선호하신다고 한다!

    @Test
    public void searchAndParam() {
        // 이름이 member1이면서 나이가 10살인 사람 조회

        Member findMember = queryFactory
                .selectFrom(member)
                .where(// where: param 넘긴 것들 다 and로 묶임
                        member.username.eq("member1"),
                        member.age.eq(10) // .and 말고 그냥 ,로 끊어서 작성해도 and로 JPQL 작성됨.
                )
                .fetchOne();

        assertThat(findMember.getUsername()).isEqualTo("member1");
    }


출처

김영한 강사님 - 인프런 실전! Querydsl

0개의 댓글