@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 |