QueryDSL
1. @Query
스프링 데이터 JPA에서 @Query는 메서드 이름만으로 쿼리를 만들기 어렵거나, 복잡한 JPQL(Java Persistence Query Language) 또는 SQL을 직접 실행하고 싶을 때 사용하는 어노테이션
사용이유
애플리케이션 로딩 시점의 문법 검사: 가장 큰 장점입니다. 쿼리에 오타가 있으면 프로젝트가 켜질 때 에러(QueryCreationException)를 발생시켜 실행 전에 문제를 잡을 수 있다.
메서드 이름 단순화: 조건이 많아지면 findByTitleContainingOrContentContainingAndUser... 처럼 메서드 이름이 무한정 길어지는데,
@Query를 쓰면 searchBoard(...) 처럼 깔끔하게 이름을 지을 수 있다.
복잡한 연산 가능: 통계 쿼리, 조인(Join), 그룹화(GROUP BY) 등 복잡한 쿼리를 자유롭게 작성할 수 있다.
사용 예
@Query(value = "SELECT * FROM board WHERE title = :title", nativeQuery = true)
2. @Modifying
만약 @Query를 사용해서 데이터를 조회(SELECT)하는 게 아니라, 수정(UPDATE)이나 삭제(DELETE)를 하고 싶다면 메서드 위에
@Modifying 어노테이션을 반드시 같이 붙여주어야 에러가 나지 않는다.
3. 쿼리 메소드
스프링 데이터 JPA는 메서드 이름을 분석하여 SQL 쿼리를 자동으로 생성하는 기능을 제공합니다. 이를 쿼리 메소드(Query Methods) 기능이라고 부름
예 : findByBnoLessThanOrTitle
스프링 JPA는 메서드 이름을 다음과 같은 구조로 인식합니다
findBy + Bno + LessThan + Or + Title
findBy "조회하겠다"는 뜻의 예약어 (SELECT ... FROM board)
Bno + LessThan: bno 필드 값이 파라미터로 전달된 값보다 작은(<) 데이터를 찾는다
Or: 앞의 조건 또는 뒤의 조건 중 하나라도 만족하는 데이터를 찾는다.
Title: title 필드 값이 파라미터로 전달된 값과 정확히 일치(=) 하는 데이터를 찾는다
4. QueryDSL
QueryDSL은 자바 코드로 SQL과 같은 쿼리를 생성할 수 있도록 지원하는 오픈소스 정적 타입 프레임워크 문자열 형태의 JPQL이 가진 단점을 극복하기 위해 널리 활용됨
QueryDSL은 컴파일할 때 지정된 엔티티 클래스를 탐색하여 이름 앞에 Q가 붙은 특수한 클래스(예: Member ->️ QMember)를 빌드 디렉토리에 자동 생성
예) QMember member = QMember.member; // 자동 생성된 Q클래스 활용
댓글
댓글이 없습니다.
