DOing
[Querydsl] where 조건과 결과 조회 본문
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 |