본문 바로가기

Tips

JPQL 예시

@Repository
public interface MemberBookRepository extends JpaRepository<MemberBook, Long> {
    int countByMemberAndReturnedAtIsNull(Member member);

    @Query("SELECT mb FROM MemberBook mb 
    WHERE mb.member.id =:memberId AND mb.book.id =:bookId AND mb.returnedAt IS NULL")
    MemberBook findByMember_IdAndBook_IdAndReturnedAtIsNull(Long memberId, Long bookId);

    @Query("SELECT mb FROM MemberBook mb WHERE mb.member.id =:memberId")
    List<MemberBook> findByMember_Id(@Param("memberId") Long memberId);

    @Transactional
    @Modifying
    @Query("DELETE FROM MemberBook mb WHERE mb.member.id =:memberId")
    void deleteByMember_Id(@Param("memberId") Long memberId);
}

메서드 레벨 : @Query 애너테이션 필수.
파라미터 레벨 : @Param 필수

A. 조회하는 메서드

SELECT : DB에서 FROM으로 설정한 테이블 중 어떤 Data를 가지고 올 것인가의 범위. 
FROM : DB에서 어떤 테이블에서 Data를 건드릴 것인가의 범위.
WHERE : FROM 테이블에서 가져올 SELECT 범위의 데이트 중, 조건을 나타냄.
JOIN : FROM에서 선택한 테이블의 column 들 중
JOIN으로 지정하면 해당 테이블의 PK를 column으로 가지고 있는 데이터를 나타냄.

SELECT mb FROM MemberBook mb : MemberBook 테이블의 모든 데이터
SELECT mb.member.id FROM MemberBook mb : MemberBook 테이블 중 memberId만 가져옴

 

Ex) MemberBook 테이블 중에 Book과 연관된 데이터 중 주어진 memberId와 일치하는 데이터.

    @Query("SELECT mb FROM MemberBook mb JOIN mb.book b WHERE mb.member.id = :memberId")
    Page<MemberBook> findMemberBookByMemberId (@Param("memberId") Long memberId, Pageable pageable);

B. 삭제하는 메서드

(Update or Delete의 경우) : @Transactional, @Modifying, @Query 필수.

'Tips' 카테고리의 다른 글

JUnit Test 코드 TIP  (0) 2023.05.16
Spring Data JPA VS JPQL and QueryDsl  (0) 2023.05.15
Mapstruct @Mapping(target = , source = )  (0) 2023.05.13
Spring Data JPA - 자동 완성 메서드 규칙  (0) 2023.05.12
Spring Data JPA N:N 매핑 참고사항  (0) 2023.05.07