Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

DOing

[Querydsl] where 조건과 결과 조회 본문

JPA

[Querydsl] where 조건과 결과 조회

mangdo 2021. 8. 4. 17:03

Querydsl 검색 조건 활용

@Test
public void search() {
  Member findMember = queryFactory
                          .selectFrom(member)
                          .where(member.username.eq("member1")
                          .and(member.age.eq(10)))
                          .fetchOne();
  assertThat(findMember.getUsername()).isEqualTo("member1");
}

 

Querydsl 검색 조건

 

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

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

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

member.age.goe(30) // age >= 30 (greater or equal)
member.age.gt(30) // age > 30
member.age.loe(30) // age <= 30 (lower or equal)
member.age.lt(30) // age < 30

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

 

 

결과 조회

  • fetch() : 리스트 조회, 데이터 없으면 빈 리스트 반환
  • fetchOne() : 단 건 조회
    • 결과가 없으면 : null
    • 결과가 둘 이상이면 : com.querydsl.core.NonUniqueResultException
  • fetchFirst() : limit(1).fetchOne()
  • fetchResults() : 페이징 정보 포함, total count 쿼리 추가 실행
    • 페이징 쿼리가 복잡해지면 데이터가져오는 쿼리와 totalcount 쿼리가 성능때문에 두개로 나누는 경우가 있다.
    • 때문에 복잡한 쿼리에서는 fetchResults()를  쓰면 안된다. 그 때는 두번을 따로 해야한다.
  • fetchCount() : count 쿼리로 변경해서 count 수 조회
//List
List<Member> fetch = queryFactory
      .selectFrom(member)
      .fetch();
//단 건
Member findMember1 = queryFactory
      .selectFrom(member)
      .fetchOne();

//페이징에서 사용
QueryResults<Member> results = queryFactory
                                  .selectFrom(member)
                                  .fetchResults();
//count 쿼리로 변경
long count = queryFactory
                .selectFrom(member)
                .fetchCount();

 

 

distinct

//List
List<Member> fetch = queryFactory
      .selectFrom(member).distinct()
      .fetch();

'JPA' 카테고리의 다른 글

[Querydsl] Join  (0) 2021.08.04
[Querydsl] 정렬, 페이징, 집계 함수, 그룹 함수  (0) 2021.08.04
Querydsl이란?  (0) 2021.08.04
[JPA] 연속성 전이(CASCADE)  (0) 2021.07.15
[JPA] Fetch - 즉시 로딩, 지연 로딩  (0) 2021.07.14