[내일배움캠프] 21일 차 TIL QueryDSL 적용 방법

2026. 3. 2. 15:06·내배캠

 21일 차 TIL

QueryDSL이란?

Entity의 매핑정보를 활용하여 쿼리에 적합하도록 쿼리 전용 클래스(Q클래스)로 재구성해주는 기술이며
여기에 JPAQueryFactory를 통한 Q클래스를 활용할 수 있는 기능들을 제공한다.

 

이때 Q클래스는 엔티티(Entity) 클래스의 정보를 똑같이 복사해서 만든 '쿼리 전용 도우미 클래스'이고,
기존 엔티티 클래스 앞에 'Q'가 붙어서 만들어진다.

 

JPAQueryFactory는 재구성한 Q클래스를 통해 문자열이 아닌 객체 또는 함수로 쿼리를 작성하고 실행할 수 있게 해주는 기술이다.
적용 방법은 다음과 같다.

1. gradle에서 QueryDSL 의존성 추가

dependencies {
    // Querydsl 관련 설정
    implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
    annotationProcessor "com.querydsl:querydsl-apt:${dependency.importedPropertie['querydsl.version]}:jakarta"
    annotationProcessor "jakarta.annotation:jakarta.annotation-api"
    annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}

 

${dependency.importedPropertie['querydsl.version]} 를 사용하여 버전정보를 동적으로 등록할 수 있다.
버전이 5.0.0이라면?
=> annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"처럼 등록된다.

이때는 상단 plugins을 수정해야 한다.

plugins{
	// java 및 spring boot 버전
    id 'io.spring.dependency-management' version '1.1.0'
}

 

2. JPAQueryFactory를 빈으로 수동 등록

@Configuration
public class JPAConfiguration{
    @PersistenceContext
    private EntityManager entityManager;
    
    @Bean
    public JPAQueryFactory jpaQueryFactory(){
		return new JPAQueryFactory(entityManager);
	}
}

3. QueryDSL로 쿼리를 작성하기 

@PersistenceContext
EntityManager em;
 
public List<User> selectUserByUsernameAndPassword(String username, String password){
	JPAQueryFactory jqf = new JPAQueryFactory(em);
	QUser user = QUser.user;
  
	List<Person> userList = jpf
								.selectFrom(user)
								.where(person.username.eq(username)
									.and(person.password.eq(password))
								.fetch();
                                
	return userList;
}

'내배캠' 카테고리의 다른 글

토스 사용 시, 결제 시나리오  (0) 2026.03.04
[내일배움캠프] 22일 차 TIL Liquibase  (0) 2026.03.03
[내일배움캠프] 20일 차 TIL Github Rules, Code Convention  (0) 2026.03.01
[내일배움캠프] 19일 차 TIL 도메인 중심 아키텍처  (0) 2026.03.01
[내일배움캠프] 18일 차 TIL 동시성문제 해결방법들  (0) 2026.02.27
'내배캠' 카테고리의 다른 글
  • 토스 사용 시, 결제 시나리오
  • [내일배움캠프] 22일 차 TIL Liquibase
  • [내일배움캠프] 20일 차 TIL Github Rules, Code Convention
  • [내일배움캠프] 19일 차 TIL 도메인 중심 아키텍처
MvA
MvA
백엔드 개발자 김재현입니다. 주로 공부하면서 느낀점을 기록합니다.
  • MvA
    Man vs Ai
    MvA
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • Java (6)
      • Python (8)
        • 딥러닝 (1)
        • 머신러닝 (7)
      • JavaScript (2)
      • 내배캠 (60)
      • 개인 프로젝트 (11)
      • 책 후기 (5)
      • 기타 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    배포
    아키텍처
    딥러닝
    내일배움캠프
    TiL
    머신러닝
    Riot API
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
MvA
[내일배움캠프] 21일 차 TIL QueryDSL 적용 방법
상단으로

티스토리툴바