Spring

JPQL이란? (@Query)

윤승 2025. 4. 10. 23:53
JPQL (Java Persistence Query Language)은
JPA에서 사용하는 객체 지향 쿼리 언어이다.


JPQL은 엔티티(Entity)와 그 필드(Field)를 기준으로 데이터를 조회한다.

 

📌 JPQL을 사용하는 이유

JPQL은 객체 지향적인 쿼리 언어로, SQL과 달리 데이터베이스 테이블이 아닌 엔티티 객체를 기준으로 쿼리를 작성한다. 이를 통해 코드가 더욱 직관적으로 변한다.

또한 JPQL은 JPA가 내부적으로 SQL로 변환하여 실행하므로, 데이터베이스에 종속되지 않고 이식성이 높다. 이런 특징 덕분에 시스템 구조나 테이블이 변경되더라도 유지보수가 쉬운 코드 작성이 가능하다.

 

 

📌 JPQL 문법 요약

JPQL문법은 SQL 문법이랑은 차이가 있다.

SQL JPQL
SELECT * FROM users SELECT u FROM User u
WHERE WHERE
JOIN JOIN (엔티티 기준)

 

 

JPQL 기본 문법 구조

  • 테이블명이 아니라 엔티티명, 필드명을 써야 한다.
SELECT [별칭] FROM [엔티티명] [별칭] WHERE [조건]

 

JPQL은 Spring Data JPA에서 제공하는 @Query 어노테이션과 함께 사용할 수 있다. 복잡한 조건의 조회 쿼리를 엔티티 기반으로 직접 작성할 수 있다는 장점이 있다.

 

 

📌 Spring Data JPA에서 JPQL 사용하기 (@Query)

 

@Query란?

Spring Data JPA에서는 복잡한 조회 쿼리가 필요할 때, JPQL을 직접 사용할 수 있도록 @Query 어노테이션을 지원한다.

@Query 어노테이션을 사용하면 복잡한 조인, 조건, 정렬 등을 JPQL로 직접 작성 가능해지고, Entity 중심으로 쿼리 작성하기에 SQL보다 유지보수에도 쉽다.

 

JPQL 사용 방법

기본 JPQL 사용

public interface MemberRepository extends JpaRepository<Member, Long> {

    @Query("SELECT m FROM Member m WHERE m.username = :username")
    Member findByUsername(@Param("username") String username);
}

// username이 일치하는 Member 객체를 DB에서 찾아 반환하는 메서드

 

 

 

    @Query("SELECT m FROM Member m WHERE m.username = :username")

 

  • @Query는 JPQL을 직접 작성할 수 있게 해주는 어노테이션이다.
  • 여기서 "SELECT m FROM Member m"은 Member 엔티티를 조회하는 JPQL 쿼리다.
  • m은 Member의 별칭이며, :username은 나중에 값을 넣어줄 파라미터 자리다.
    Member findByUsername(@Param("username") String username);

 

 

 

  • @Param("username")은 :username에 메서드의 username 값을 매핑해 준다.
  • 이 메서드는 입력받은 username에 해당하는 Member 객체를 반환한다.

 

'Spring' 카테고리의 다른 글

HttpMessageConverter  (1) 2025.04.15
뉴스피드 프로젝트 트러블 슈팅  (4) 2025.04.14
뉴스피드 프로젝트 설계  (1) 2025.04.07
Spring - REST API 기반 일정 관리 서버 시스템2  (0) 2025.04.04
Spring Container와 Spring Bean  (0) 2025.03.27