Q로 시작하는 쿼리용 클래스, 이를 통해 엔티티의 필드를 메서드 체이닝 방식으로 안전하게 참조할 수 있음queryFactory
.select(조회대상)
.from(대상엔티티)
.where(조건)
.orderBy(정렬)
.fetch();
| 메서드 | 의미 | 예시 |
|---|---|---|
eq() | 같다 | user.roleEnum.eq(UserRoleEnum.ADMIN) |
ne() | 다르다 | user.username.ne("관리자") |
gt() | 초과 | user.id.gt(1) |
goe() | 이상 | user.id.goe(3) |
contains() | 포함 | user.email.contains("gmail") |
endsWith() | 끝남 | user.email.endsWith(".com") |
목표: “여행” 키워드가 포함된 게시글(Post) 조회
List<Post> result = queryFactory
.selectFrom(post)
.where(post.content.contains("여행")) // 실제 SQL의 LIKE '%keyword%'와 동일하게 동작한다.
.fetch();
결과 예시
후쿠오카 여행 후기 (작성자: 앨리스)
목표: ADMIN 사용자 또는 이름에 “밥”이 포함된 사용자 조회
List<User> result = queryFactory
.selectFrom(user)
.where(
user.roleEnum.eq(UserRoleEnum.ADMIN)
.or(user.username.contains("밥"))
)
.fetch();
결과 예시
관리자 (ADMIN)
밥 (NORMAL)
목표: “앨리스”가 작성한 게시글(Post) 조회
List<Post> result = queryFactory
.selectFrom(post)
.join(post.user, user) // 실제 SQL의 INNER JOIN과 동일하게 동작한다.
.where(user.username.eq("앨리스"))
.fetch();
결과 예시
후쿠오카 여행 후기
조호바루 맛집 탐방
싱가포르 출퇴근 일상
목표: 게시글과 작성자 정보를 한 번에 로딩
List<Post> result = queryFactory
.selectFrom(post)
.join(post.user, user).fetchJoin()
.fetch();