-
Querydsl - 검색(select)과 결과 조회JPA/Querydsl 2023. 8. 12. 23:06
검색(select) 조건 쿼리
@Test public void search() { Member findMember = queryFactory .selectFrom(member) .where(member.username.eq("member1") .and(member.age.eq(10))) // .where(member.username.eq("member1"),member.age.eq(10))로 and 묶기도 가능 .fetchOne(); assertThat(findMember.getUsername()).isEqualTo("member1"); }
select를 할 때에는 위와 같이 querydsl을 사용하면 된다. selectFrom으로 member를 받아온 다음에 where절에 조건을 준다. 여러 조건을 주려면 and로 여러 조건을 주면 되고 마지막에는 fetchOne()으로 결과 값을 받아온다.
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 member.age.gt(30) // age > 30 member.age.loe(30) // age <= 30 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, 둘 이상이면 NonUniqueResultException
- fetchFirst() : limit(1), fetchOne()
- fetchResult() : 페이징 정보 포함, total count 쿼리 추가 실행
- fetchCount() : count 쿼리로 변경해서 count 수만 조회
@Test public void resultFetch() { List<Member> fetch = queryFactory .selectFrom(member) .fetch(); // 리스트로 조회 Member fetchOne = queryFactory .selectFrom(member) .fetchOne(); // 하나만 조회 Member fetchFirst = queryFactory .selectFrom(member) .fetchFirst(); // limit(1) 걸어서 fetchOne() 해주는 것 QueryResults<Member> result = queryFactory .selectFrom(member) .fetchResults(); result.getTotal(); List<Member> results = result.getResults(); // 이걸 꺼내야지 data가 나옴 long total = queryFactory .selectFrom(member) .fetchCount(); // member의 전체 개수 조회 }
위에서 정리한 fetch()만 이해한다면 나머지는 JPQL을 잘 알고 있다면 이해하기 어렵지 않을 것이다.
성능이 중요한 프로젝트에서는 count 쿼리를 한 번 더 날리는 fetchResults()를 사용하지 않고 따로 count를 하는 쿼리를 만들어줘서 쿼리를 분리해줘야 한다.
'JPA > Querydsl' 카테고리의 다른 글
Querydsl - 서브 쿼리 (0) 2023.08.13 Querydsl - 조인 (0) 2023.08.13 Querydsl - 정렬과 페이징, 집합 (0) 2023.08.12 Querydls과 JPQL의 차이 (0) 2023.08.12 Querydls의 기본 설정 (0) 2023.08.12