[JPA] Querydsl 메서드 정리
- 코딩/Spring
- 2022. 11. 8.
QueryDsl 메서드 알아보기
JPA Querydsl은 JPA를 이용하여 동적 쿼리를 작성할 수 있게 해주는 라이브러리입니다. Querydsl은 JPA와 연동하여 사용할 때, 다양한 메소드를 제공합니다. 이 중에서 주요한 메소드를 정리하면 다음과 같습니다.
메서드명 | 메서드 설명 |
select() | 검색 대상 엔티티의 속성을 선택합니다. |
from() | 검색 대상 엔티티를 지정합니다. |
where() | 조건을 지정합니다. |
orderBy() | 정렬을 지정합니다. |
join() | 조인을 수행합니다. |
on() | 조인 조건을 지정합니다. |
fetch() | 즉시 로딩(fetch join)을 수행합니다. |
leftJoin(), innerJoin(), rightJoin(), fullJoin() | 각각의 조인 유형에 따라 조인을 수행합니다. |
count() | 검색 결과의 개수를 조회합니다. |
distinct() | 중복된 결과를 제거합니다. |
groupby() | 그룹화를 수행합니다. |
having() | 그룹화된 결과에 대한 조건을 지정합니다. |
limit() | 검색 결과의 최대 개수를 지정합니다. |
offset() | 검색 결과의 시작 위치를 지정합니다. |
exists() | 하나 이상의 엔티티가 검색 결과로 존재하는지 확인합니다. |
예시
public List<Member> searchMember(String username, int age, int offset, int limit) {
QMember member = QMember.member;
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
List<Member> members = queryFactory
.select(member)
.distinct()
.from(member)
.leftJoin(member.team, QTeam.team)
.where(member.username.eq(username)
.and(member.age.gt(age)))
.orderBy(member.age.desc())
.groupBy(member.id, member.username)
.having(member.age.avg().gt(20))
.offset(offset)
.limit(limit)
.fetch();
return members;
}
위의 예시는 회원(Member) 엔티티를 대상으로 모든 JPA Querydsl 메소드를 사용하는 메소드입니다.
- select() 메소드를 사용하여 검색 대상 엔티티의 속성을 선택
- distinct() 메소드를 사용하여 중복된 결과를 제거
- from() 메소드를 사용하여 검색 대상 엔티티를 지정
- leftJoin() 메소드를 사용하여 조인을 수행
- where() 메소드를 사용하여 검색 조건을 지정
- orderBy() 메소드를 사용하여 검색 결과를 정렬
- groupBy() 메소드를 사용하여 그룹화를 수행
- having() 메소드를 사용하여 그룹화된 결과에 대한 조건을 지정
- offset() 메소드와 limit() 메소드를 사용하여 검색 결과의 시작 위치와 최대 개수를 지정
- fetch() 메소드를 사용하여 검색 결과를 조회
위의 예시에서도 QMember 클래스를 사용하여 엔티티를 지정합니다. QTeam 클래스는 회원과 조인할 팀(Team) 엔티티에 대한 Q타입 클래스입니다. 이를 이용하여 컴파일 타임에 검증 가능한 동적 쿼리를 작성할 수 있습니다.
'코딩 > Spring' 카테고리의 다른 글
[Spring] Entity를 Dto로 변환(MapStruct) (0) | 2022.11.10 |
---|---|
[Spring] @Request Body에서는 Setter가 필요없는 이유 (0) | 2022.11.09 |
[Spring] JPA 중복 컬럼 상속으로 생성하는 방법 (0) | 2022.11.07 |
[Spring] Jpa Paging 페이징 처리방법 (0) | 2022.11.07 |
[Spring] 스프링 modelmapper Java Entity Dto 매핑 (0) | 2022.11.03 |