JPQL과 Querydsl을 사용하다 보면 기본적인 CRUD는 반복적으로 작성해야 한다.

 

그 반복적인 과정을 피하기 위해 JpaRepository 인터페이스를 제공한다.

 

Repository 클래스를 따로 생성시키지 않고, JpaRepository 인터페이스를 상속받아서 JpaRepository에서 선언한 메소드들을 사용할 수 있게 된다.

 

거기에 더해서 JpaRepository에서 제공하는 메소드 외에 필요한 쿼리를 수행하기 위한 메소드를 직접 정의할 수도 있다.

 

public interface PostRepository extends JpaRepository<Post, Long> {...}
public interface [사용할 Repository 이름] extends JpaRepository< [사용할 엔티티], [ID] > {...}

 

주요 메소드는 아래 주소에 간단히 정리해 보았다.

 

JpaRepository의 주요 메소드를 이해해보자.

JpaRepository를 사용할 때 우리는 아래와 같은 형태를 사용합니다. Item : Entity public interface ItemRepository extends JpaRepository {...} 그리고 JpaRepository의 이해를 돕자면 JpaRepository의 상속을..

sweets1327.tistory.com

 

이 방법 외에도 @Query 애노테이션을 사용하는 방법이 있다.

 

이 방법은 @Query(" ") 안에 쿼리를 직접 작성하는 방식이다.

 

기본 값으로 JPQL을 작성할 수 있지만, 속성 값 변경을 통해 SQL을 작성할 수도 있다.

 

만약 SQL을 사용하고 싶다면 "nativeQuery=true"를 추가하면 된다.

 

DB를 변경할 필요가 있다면 @Query 위에 @Modifying을 사용한다.

 

그리고 파라미터를 전달할 때는 @Param("[파라미터명]")을 함께 사용한다.

 

@Modifying
@Query("update Post p set p.count = p.count + 1 where p.id = :postId")
int updateHitById(@Param("postId") Long id);

//:[파라미터명] -> @Param("[파라미터명]")을 동일하게 사용해야 한다.

 

즉, Repository에 직접 EntityManager을 사용해서 만들던 것을 JpaRepository를 상속받으면서 작성할 코드가 줄어든다.