Query DSL의 메서드를 정리해보고자 한다.
Entity Mangager를 사용하기에 메서드가 동일하다
1. Basic Structure
QUser user = QUser.user;
User result = queryFactory
// Select
.select(user)
.from(user)
.where(user.userName.eq("name"))
.fetchOne();
// Update
.update(user)
.set(user.name, "name_changed")
.where(user.userName.eq("name"))
.execute();
// Delete
.delete(user)
.where(user.userName.eq("name"))
.execute();
- Delete Join은 JPQL, QueryDSL 모두 지원 안함
2. Basic Methods
QUser user = QUser.user;
User result = queryFactory
.select(user)
.from(user)
// 값 일치
.where(user.userName.eq("name"))
// 값 불일치
.where(user.userName.ne("name"))
// Null 여부
.where(user.userName.isNotNull())
// 범위 일치
.where(user.age.in(20, 40))
// 범위 불일치
.where(user.age.notIn(20, 40))
// 범위 일치
.where(user.age.between(20, 40))
// >=
.where(user.age.goe(20))
// >
.where(user.age.gt(20))
// <=
.where(user.age.loe(20))
// <
.where(user.age.lt(20))
// 검색 1
.where(user.userName.like("name%"))
.where(user.userName.like("%name%"))
.where(user.userName.like("%name"))
// 검색 2
.where(user.userName.contains("name"))
.where(user.userName.startsWith("name"))
// And, Or
where(user.userName.startsWith("name").and(user.age.lt(20)))
where(user.userName.startsWith("name").or(user.age.lt(20)))
.fetchOne();
3. Result Methods
// 리스트 조회
.fetch()
// 한건 조회
// 결과 없음 : Null
// 결과가 둘이상 : NonUniqueException
.fetchOne()
// 가장 먼저 등장하는 한건 조회
// + limit(1), fetchOne()
.fetchFirst()
// 건수 조회
// + count
.fetchCount()
-> Deprecated
-> fetch().get(0)
-> count()를 select안에 작성해 같이 사용
4. Sorting
QUser user = QUser.user;
User result = queryFactory
.select(user)
.from(user)
.where(user.userName.eq("name"))
// 정렬(내림차순, 오름차순 + age가 Null이면 결과 마지막에 합쳐서 출력)
.orderBy(user.age.desc(), user.age.asc().nullslast())
// 앞에서부터 특정 개수만큼 생략
.offset(2)
// 조회 개수 제한
.limit(2)
.fetchOne();
5. Math
// Counting
.select(user.count(),
// 합
user.age.sum(),
// 평균
user.age.avg(),
// 최대값
user.age.max(),
// 최소값
user.age.min())
6. Left Join
QUser user = QUser.user;
User result = queryFactory
.select(store)
.from(store)
.leftjoin(store.user, user).on(store.storeName.eq("steakHouse"))
.where(user.userName.eq("name"))
.fetch();
'Server Development > Data API' 카테고리의 다른 글
mappedBy, Cascade (0) | 2023.07.10 |
---|---|
JPA - Query DSL (0) | 2023.05.11 |
JPA - Join (0) | 2023.05.09 |
Cache - Redis (0) | 2023.04.06 |
JPA - @Query with Spring JPA (0) | 2023.04.05 |