
SQL이나 JPQL을 문자열로 쓰지 않고,
자바 문법처럼 안전하게 조회 조건을 만드는 기술
-동적 쿼리를 만들기 좋다.
사용법
dependencies {
implementation 'com.querydsl:querydsl-jpa::jakarta'
annotationProcessor 'com.querydsl:querydsl-apt::jakarta'
annotationProcessor 'jakarta.annotation:jakarta.annotation-api'
annotationProcessor 'jakarta.persistence:jakarta.persistence-api'
}
spring:
jpa:
show-sql: true
properties:
hibernate:
format_sql: true
highlight_sql: true
use_sql_comments: true


build 실행, main 실행 중 바꿔서 설정할 수도 있음
@Configuration
public class QueryDslConfig{
@PersistenceContext
private EntityManager entityManager;
@Bean
public JPAQueryFactory jpaQueryFactory(){
return new JPAQueryFactory(entityManager);
}
}
EntityManager를 주입받고, 그걸 기반으로 JPAQueryFactory를 만든다.
나중에 레포지터리에서 주입받아 사용
package org.example.orgmanager.repository;
import org.example.orgmanager.domain.Employee;
import java.util.List;
public interface EmployeeRepositoryCustom {
List<Employee> searchByName(String name);
}
@RequiredArgsConstructor
public class EmployeeRepositoryImpl implements EmployeeRepositoryCustom {
private final JPAQueryFactory queryFactory;
@Override
public List<Employee> searchByName(String name) {
QEmployee employee = QEmployee.employee;
return queryFactory
.selectFrom(employee)
.where(employee.name.eq(name))
.fetch();
}
}
QEmplyee를 사용해서 Employee 테이블에서 이름이 같은 데이터를 조회한 후, fetch()로 결과 리스트 반환
public interface EmployeeRepository
extends JpaRepository<Employee, Long>, EmployeeRepositoryCustom {
}
eq() : 같다ne() : 같지 않다goe() : 크거나 같다gt() : 크다loe() : 작거나 같다lt() : 작다contatins() : 포함startsWith() : ~로 시작endsWith() : ~로 끝남@PersistenceContext
private EntityManager entityManager;