본문 바로가기
백엔드/JPA

QueryDsl, data jpa 하나의 레포지토리 사용

by 김어찐 2022. 3. 10.
728x90

클래스, 인터페이스 구조

 

최종 사용하는 레포지토리 (MemberDataRepository)

import java.util.Optional;

@EnableJpaRepositories
/**
 *  실제 사용하는 리포지토리
 * 단순한 CRUD 쿼리는 여기서 작성
 */
public interface MemberDataRepository extends JpaRepository<Member, Long>, MemberCustomRepository {
    Member findMemberByEmail(String email);
}

 

MemberCustomRepository

import java.util.List;

@Repository
//커스텀 인터페이스 쿼리 작성
public interface MemberCustomRepository {

    Long editProfile(ProfileForm profileForm);

    void delateRegions(Member member);

    void saveMemberRegion(MemberRegion memberRegion);
}

 

MemberCustomRepositoryImpl (MemberCustomRepository 구현체)

@Repository
@RequiredArgsConstructor
//커스텀 인터페이스 쿼리 구현
public class MemberCustomRepositoryImpl implements MemberCustomRepository {


    private final JPAQueryFactory queryFactory;
    private final EntityManager em;

    @Override
    public Long editProfile(ProfileForm profileForm) {
        return queryFactory
                .update(member)
                .set(member.bio, profileForm.getBio())
                .set(member.onOffStatus, profileForm.getOnOffStatus())
                .where(member.nickname.eq(profileForm.getNickname())).execute();
    }

    @Override
    public void delateRegions(Member member) {
        queryFactory
                .delete(memberRegion)
                .where(memberRegion.member.id.eq(member.getId()))
                .execute();
    }
    //...등등
}
728x90