1️⃣ JPAQueryFactory란?
- QueryDSL의 쿼리 생성과 실행을 담당하는 핵심 클래스
- EntityManager를 활용하여 JPQL 쿼리 작성 및 실행
2️⃣ JPAQueryFactory 빈 등록하기
@Configuration
public class QuerydslConfig {
@PersistenceContext
private EntityManager em;
@Bean
public JPAQueryFactory queryFactory() {
return new JPAQueryFactory(em);
}
}
3️⃣ 실무에서 권장하는 JPAQueryFactory 활용 방법
JpaRepository(기본 CRUD 제공)와 JPAQueryFactory(복잡한 쿼리 처리)의 조합
public interface UserRepository extends JpaRepository<User, Long>, UserRepositoryCustom {}
public interface UserRepositoryCustom {
List<User> findDynamic(String name, Integer age);
}
@Repository
public class UserRepositoryCustomImpl implements UserRepositoryCustom {
private final JPAQueryFactory queryFactory;
public UserRepositoryCustomImpl(JPAQueryFactory queryFactory) {
this.queryFactory = queryFactory;
}
@Override
public List<User> findDynamic(String name, Integer age) {
BooleanBuilder builder = new BooleanBuilder();
if(name != null) builder.and(QUser.user.name.eq(name));
if(age != null) builder.and(QUser.user.age.goe(age));
return queryFactory.selectFrom(QUser.user)
.where(builder)
.fetch();
}
}
4️⃣ JpaRepository와 JPAQueryFactory를 함께 사용할 때의 장점
- 기본 CRUD는 JpaRepository에서 편리하게 관리
- 복잡한 쿼리는 JPAQueryFactory로 관리하여 가독성과 유지보수성 향상
- 인터페이스 다중 상속은 스프링에서 자동 관리되어 문제없음
'SPRING' 카테고리의 다른 글
| [SPRING] Spring Security + JWT 인증 예외 처리 흐름 (1) | 2025.04.01 |
|---|---|
| [SPRING] JWT (2) | 2025.04.01 |
| [SPRING] QueryDSL (1) | 2025.03.30 |
| [SPRING] 동적 쿼리 (1) | 2025.03.30 |
| [SPRING BOOT + JPA] 일정 관리 앱 회고 (2) | 2025.03.28 |