Query Dsl+ Data Jpa


[1. query dsl]
SQL文を最大限に回避し、Javaとして開発することができます.
[2.query dsl+DATA JPA使用方法]
query dslに基づいて,Repositoryとして3つの方法を用いることができる.
1. jpa repository + query dsl repository
jpa Repositryがサポートする機能(従来のfindbyId()など)は、dslリポジトリ内の2つのリポジトリをクエリーし、動的クエリーまたは複雑な論理のクエリーに使用されます.各ドメインに2つのRepositoryがあり、各サービスグループにも2つあるので、かなり面倒になります.
2. query dsl repository
1つのquery dslリポジトリで必要なすべてのメソッドを記述する必要がありますが、datajpaを使用する必要がある場合は、容易に実現できるコンテンツのためにすべてのメソッドを記述する必要があります.これも面倒です.
3.1つのリポジトリからquerydsl、jpaを継承する
Data jpaでは,ユーザが直接実現するクライアントレポートと組み合わせた機能を実現している.しかし、ルールがあります.
インタフェース:RepositoryCustom
実施者:RepositoryCustomImpl
CustomとCustomImplを貼り付けて作成します.例を挙げる.
1.MemberRepositoryCustom:インタフェース
public interface MemberRepositoryCustom {
 List<Member> findAll();
 List<Member> findByName(String name);
}
2.M e mberRepositoryCustomImpl:実施体
@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
public interface MemberRepository extends JpaRepository<Member,Long> , MemberRepositoryCustom{
    List<Member> findByAddress_City(String City);
}
これは,1つのRepositoryにおいて,動的クエリ領域とデータjpaが十分に利用され,便利であることを示している.