[JPA] JPQL & QueryDSL 개념, 용도, 사용방법
반응형
JPQL (Java Persistence Query Language)
개념
JPQL은 Java Persistence API (JPA)를 사용하여 데이터베이스에서 객체를 조회하기 위한 쿼리 언어입니다. SQL과 유사하지만, JPQL은 데이터베이스 테이블이 아닌 엔티티 객체를 대상으로 작동합니다. 따라서 객체 지향적인 방식으로 데이터베이스 쿼리를 작성할 수 있습니다.
용도
- 엔티티 객체를 조회할 때 사용
- 복잡한 쿼리를 작성할 수 있지만, 쿼리 문자열이 고정되어 있어 동적 쿼리를 작성하는 데 제한적
사용 방법
java
// JPQL 예시
@Query("SELECT p FROM Post AS p WHERE p.title LIKE %:title% ")
List<Post> findAllByTitle(@Param("title") String titleStr);
QueryDSL
개념
QueryDSL은 JPA의 동적 쿼리 생성을 쉽게 하기 위한 도구입니다. 쿼리 타입을 제공하여 자바 코드 내에서 타입 안정성이 보장되는 쿼리를 작성할 수 있습니다. 동적 쿼리를 작성하기에 적합합니다.
용도
- 동적 쿼리 작성에 적합
- 컴파일 시점에 타입 체크가 가능하여 안전한 쿼리 작성 가능
사용 방법
java
import com.querydsl.core.types.dsl.BooleanExpression;
import com.querydsl.jpa.impl.JPAQueryFactory;
import org.springframework.beans.factory.annotation.Autowired;
public class PostRepositoryCustomImpl implements PostRepositoryCustom {
@Autowired
private JPAQueryFactory queryFactory;
@Override
public List<Post> findAllByTitle(String titleStr) {
QPost post = QPost.post;
return queryFactory.selectFrom(post)
.where(titleContains(titleStr))
.fetch();
}
private BooleanExpression titleContains(String titleStr) {
if (titleStr == null || titleStr.isEmpty()) {
return null;
}
return QPost.post.title.containsIgnoreCase(titleStr);
}
}
요약
- JPQL: 정적 쿼리에 적합, SQL과 유사하지만 객체 지향적인 방식
- QueryDSL: 동적 쿼리에 적합, 타입 안전성 보장
반응형
'낙서장[1] > 3. JPA' 카테고리의 다른 글
[JPA] Spring Data JPA의 Pageable 인터페이스: 페이징과 정렬을 손쉽게 처리하기 (0) | 2025.01.24 |
---|---|
[JPA] JPQL 쿼리 설명 (0) | 2025.01.24 |
[JPA] 일반 JOIN과 FETCH JOIN을 지연 로딩(LAZY)과 즉시 로딩(EAGER)과 접목한 차이와 장단점 (1) | 2025.01.24 |
[JPA] 데이터베이스와 상호작용하는 객체 지향 프로그래밍 JPA 기초 (2) | 2025.01.24 |