Query Dsl+ Data Jpa

Developer:Bird·2021년 1월 20일
0

Spring

목록 보기
11/17
post-custom-banner

[1. query dsl]

이를 활용하면 SQL문을 최대한 지양하고 Java로 개발할 수 있다.

[2.query dsl+DATA JPA 활용방법]

query dsl을 기반으로 Repository로 활용할 수 있는 법은 크게 세가지가 있다.

1. jpa repository + query dsl repository

일반적인 findbyId()와 같이 JpaRepositry에서 지원하는 기능들을 최대한 활용한채 동적인 쿼리나 복잡한로직의 쿼리에 한해서 query dsl repository에서 담당하도록 짜게 되는데 두개의 repository를 가짐으로써, 모든 도메인에 관한 Repository는 2개씩 가지게 되고 각 서비스단에서도 두개씩 가지게 됨으로써 상당히 번거로워진다.

2. query dsl repository

하나의 query dsl repository에서 모든 필요한 메서드를 작성하여야 하는데 굳이 data jpa를 이용하면 쉽게 구현가능한것들에 대해 다 작성해야 하니 이또한 번거롭다.

3. 하나의 repository에서 querydsl,jpa 상속

Data jpa에서 사용자가 직접구현한 CustomRepository와 합칠 수 있도록 기능을 구현하고 있다. 단 규칙이 있다.

인터페이스: RepositoryCustom
구현체: RepositoryCustomImpl

다음과 같이 Custom과 CustomImpl을 붙여서 작성하여야 한다. 예를 들어보자.
1.MemberRepositoryCustom:인터페이스

public interface MemberRepositoryCustom {
 List<Member> findAll();
 List<Member> findByName(String name);

}

2.MemberRepositoryCustomImpl :구현체

@Repository
@RequiredArgsConstructor
public class MemberRepositoryCustomImpl implements MemberRepositoryCustom {
    private final JPAQueryFactory query;

    @Override
    public List<Member> findAll() {
        return query.selectFrom(member).fetch();
    }

    @Override
    public List<Member> findByName(String name) {
        return query.selectFrom(member).
                where(member.name.eq(name)).fetch();
    }
}

3.최종 repository

@Repository
public interface MemberRepository extends JpaRepository<Member,Long> , MemberRepositoryCustom{
    List<Member> findByAddress_City(String City);
}

이렇게 사용함으로써 하나의 Repository에서 동적쿼리영역 및 data jpa를 전적으로 활용하고 편리하게 사용되는것을 알 수 있다.

profile
끈임없이 발전하자.
post-custom-banner

0개의 댓글