Spring Boot (8) Spring Data JPA

넙데데맨·2022년 8월 6일
0

JPQL

JPA Query Language의 줄임말

  • JPA에서 사용할 수 있는 쿼리로 SQL과 사용 방법이 비슷하다.
  • SQL이 테이블, 칼럼 이름을 사용하는 것처럼 엔티티 클래스의 이름과 필드의 이름을 사용한다.
  • 리포지토리는 JpaRepository를 상속 받아 다양한 CRUD 메서드를 제공하지만 필요한 기능을 별도 정의해야 하는 경우가 많다.

쿼리 메서드

@Query

튜닝된 쿼리를 사용하고자 할 때 직접 SQL 작성
Query 1

	@Query("SELECT p FROM AS Product AS p WHERE p.name = ?1")
    List<Product> findByName(String name);

?1는 파라미터를 전달받기 위한 인자로 ?1은 첫번째 인자를 말한다.
Query 2

	@Query("SELECT p FROM AS Product AS p WHERE p.name = ?1")
    List<Product> findByNameParam(@Param("name") String name);  

Query 1의 방식은 파라미터 순서를 정해 넣어야하는 단점을 갖고 있기때문에 @Param 어노테이션을 이용하는 것이 좋다.

QueryDSL

메서드의 이름을 기반으로 생성하는 JPQL의 한계는 @Query로 해결 가능했지만 문자열을 입력하기 때문에 에러가 발생할 수 있다.
이를 해결하기 위해 사용한다.

QueryDSL?

정적 타입을 이용해 SQL과 같은 쿼리를 생성할 수 있도록 지원하는 프레임워크

장점

  • IDE가 제공하는 자동완성 사용 가능
  • 문법적으로 잘못된 쿼리 허용 X
  • 고정된 SQL 쿼리를 작성하지 않기 때문에 동적인 쿼리 생성
  • 가독성, 생산성 증가
  • 도메인, 프로퍼티의 안정적인 참조

특징

엔티티 클래스와 Q도메인이라는 쿼리타입 클래스를 자체적을 생성해서 메타데이터로 사용

profile
차근차근

0개의 댓글