Mecodata
2025. 7. 12. 12:01
정의
- QueryDSL이 Entity 클래스를 기반으로 자동 생성하는 클래스로 Entity 클래스의 메타 데이터를 가지고 있는 클래스
특징
- Q+[엔티티명] 형식으로 자동 생성됨 (generated 폴더)
- 엔티티의 각 필드는 Q클래스에서 QueryDSL 타입 필드로 변환
- 컴파일 단계에서 생성 → 런타임 시점에 에러를 발견하는 보통의 경우와 다르게 컴파일 단계에서 에러 발견 가능
- 필드명(컬럼명)을 직접 기억하지 않고 쿼리 작성을 보다 편리하게 할 수 있음
- 엔티티를 직접 사용하는 것이 아니라 QueryDSL이 엔티티 클래스 정보 활용을 위해 QClass를 만들어 사용
→ 타입 안전한 쿼리작성 가능 (타입 안정성 보장)
※ 일반적으로 .gitignore로 관리 제외
예시
엔티티
@Entity
public class Member {
@Id
private Long id;
private String username;
private int age;
}
Q클래스
public class QMember extends EntityPathBase<Member> {
public static final QMember member = new QMember("member");
public final NumberPath<Long> id = createNumber("id", Long.class);
public final StringPath username = createString("username");
public final NumberPath<Integer> age = createNumber("age", Integer.class);
}
조회 메소드 예시
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
@RequiredArgsConstructor
public class MemberRepositoryCustom {
private final JPAQueryFactory queryFactory;
public List<Member> findByUsername(String username) {
QMember m = QMember.member;
return queryFactory
.selectFrom(m)
.where(m.username.eq(username))
.fetch(); // List<Member> 반환
}
}
// List<Member> users = memberRepositoryCustom.findByUsername("홍길동");
// SELECT * FROM member WHERE username = '홍길동'