본문 바로가기

프로젝트 일지

#9. 싱글 프로젝트 일지 - libraryMember 도메인

- LibraryMember 도메인 구조 -

LibraryMember는 도서관에 등록된 회원에 대한 동작을 담당하는 도메인이다.

 

1. DTO

도서관별로 회원 조회하는 메서드의 응답에 대한 필드를 가지고 있는 DTO 클래스이다.

 

2. Entity

1. 도서관에 등록된 회원에 대한 DB속 테이블에 필요한 정보를 필드로 담고있다.
2. 연관관계에 있는 테이블과의 관계도를 필드로 담고 있다.

 

3. Mapper

도서관에 속한 회원 전체리스트 조회 메서드에 사용되며, LibraryMember 객체를 Dto로 변환하는 역할.
응답 데이터를 나타내는 ResponseDto에 있는 필드들을 매핑할 위치를 선언할 수 있다.

@Mapper(componentModel = "spring")
public interface LibraryMemberMapper {
    @Mapping(target = "libraryId", source = "library.libraryId")
    @Mapping(target = "memberId", source = "member.memberId")
    @Mapping(target = "libraryMemberId", source = "libraryMemberId")
    @Mapping(target = "name", source = "member.name")
    @Mapping(target = "phone", source = "member.phone")
    @Mapping(target = "email", source = "member.email")
    LibraryMemberDto.Response libraryMemberToLibraryMemberDtoResponse (LibraryMember libraryMember);
    List<LibraryMemberDto.Response> libraryMembersToLibraryMembersDtoResponse (List<LibraryMember> libraryMembers);
}

 

4. Repository

LibraryMember에 대한 데이터를 다양한 조건으로 DB에서 가져오도록 JPQL을 작성함.

@Repository
public interface LibraryMemberRepository extends JpaRepository<LibraryMember, Long> {

    @Query("SELECT lm FROM LibraryMember lm WHERE lm.library.id = :libraryId")
    public Page<LibraryMember> findAllLibraryMembersByLibraryId
    (@Param("libraryId")Long libraryId, Pageable pageable);
    
    @Query("SELECT lm FROM LibraryMember lm 
    WHERE lm.library.id = :libraryId AND lm.member.id =:memberId")
    LibraryMember findByLibrary_IdAndMember_Id
    (@Param("libraryId")Long libraryId, @Param("memberId") Long memberId);
}

1. LibraryMember 테이블에서 libraryId 행(row)가 주어진 libraryId와 일치한 데이터를 가져온다.

2. LibraryMember 테이블에서 libraryId와 memberId가 주어진 것들과 일치한 데이터를 가져온다. 

 

5. Service

LibraryBookRepository와 연계하여 DB에서 LibraryMember 테이블을 다룰 수 있도록 메서드를 보유.


A메서드. LibraryId로 LibraryMember 객체를 가져오는 메서드.
B메서드. LibraryId와 MemberId로 LibraryMember객체를 가져오는 메서드