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 |
