menuhwang

[Spring Boot] JPQL과 @Query 본문

스터디/Spring

[Spring Boot] JPQL과 @Query

menuhwang 2022. 10. 9. 21:43

JPQL과 @Query

JPQL


JPQL : JPA Query Language

SQL문법과 거의 비슷하다.

SQL과 차이점은 테이블이나 컬럼의 이름을 사용하는 것이 아니라 엔티티 객체의 이름과 필드 이름을 사용한다는 것이다.


  
SELECT p FROM Product AS p WHERE p.name = ?1;

SELECT

조회할 컬럼 을 선택.

위 예시처럼 엔티티 별칭을 입력하면 전체 컬럼을 조회한다.


  
SELECT * FROM product ...

FROM

조회할 엔티티 선택.

AS

조회 조건을 정의.

AS를 생략하고 SELECT p FROM Product p라고 작성 가능하다.

WHERE

조회 조건을 정의.

컬럼 = 값 형식으로 작성한다.

@Query


예시 코드


  
@Query("SELECT p FROM Product AS p WHERE p.category = ?1")
List<Product> findByCategory(String category);
@Query("SELECT p FROM Product p WHERE p.category LIKE %:category%")
List<Product> findByCategory2(@Param("category") String category);
@Query("SELECT p.name, p.category, p.price FROM Product p WHERE p.category LIKE %:category%")
List<Object[]> findByCategory3(@Param("category") String category);

@Query

JPQL을 직접 작성하여 사용한다.

직접 사용하는 데이터베이스의 SQL문을 작성해도 가능하다. 단, 데이터베이스를 변경하게 되면 SQL문도 바꿔야 한다.

@Param

메서드 인자를 쿼리문에 사용하는 방법은 두 가지가 있다.

메서드 인자의 위치를 쿼리문에 넣어주는 방법. @Param 어노테이션을 사용하는 방법.

전자의 경우 파라미터의 순서가 바뀌면 오류가 발생할 가능성이 있다.

따라서, @Param 어노테이션 사용을 권장한다.

Comments