Spring Data JPA、カスタムリポジトリ
7612 ワード
Spring Data JPAのRepository
Spring Data JPAでは、レポートはインタフェースのみを定義し、インプリメンテーションボディはスプリングによって自動的に生成されます.
Spring Data JPAが提供するインタフェースを直接実装したい場合は、実装する機能が多すぎて、かえって効率が低下します.
では、様々な理由でインタフェースメソッドを直接実装したい場合は、どうすればいいのでしょうか.
代表的な方法は以下の通りです. JPAダイレクトインプリメンテーション(EntityManager) を使用 Spring JDBCテンプレート を使用 Mybatis を使用データベースインタフェースを直接使用...等 QueryDSLを使用します. 直接使用JPA実施
これはJPAを用いて直接実現する方法である.
カスタムインタフェース
以下のように使用します.
カスタムインプリメンテーションクラスの名前には、「リポジトリインタフェース名+Impl」というルールがあります.
これによりSpring Data JPAはSpring Beanとして認識して登録して管理することができます.
Implの代わりに別の名前を使用する場合は、次の2つの方法のいずれかを使用します. XML設定 Java Config設定
「カスタムインタフェース名+Impl」方式もサポートされています.
つまり、MemberRepositoryCustomImplではなく、MemberRepositoryCustomImplのようにすることができます.
Spring Data JPAでは、レポートはインタフェースのみを定義し、インプリメンテーションボディはスプリングによって自動的に生成されます.
Spring Data JPAが提供するインタフェースを直接実装したい場合は、実装する機能が多すぎて、かえって効率が低下します.
では、様々な理由でインタフェースメソッドを直接実装したい場合は、どうすればいいのでしょうか.
代表的な方法は以下の通りです.
これはJPAを用いて直接実現する方法である.
カスタムインタフェース
public interface MemberRepositoryCustom {
List<Member> findMemberCustom();
}
カスタムインタフェース実装クラス@RequiredArgsConstructor
// MemberRepository(리포지토리 인터페이스 이름) + Impl
public class MemberRepositoryImpl implements MemberRepositoryCustom {
private final EntityManager em;
@Override
public List<Member> findMemberCustom() {
return em.createQuery("select m from Member m")
.getResultList();
}
}
カスタムインタフェースの継承public interface MemberRepository
extends JpaRepository<Member, Long>, MemberRepositoryCustom {
}
カスタムメソッドの呼び出し以下のように使用します.
List<Member> result = memberRepository.findMemberCustom();
リファレンスカスタムインプリメンテーションクラスの名前には、「リポジトリインタフェース名+Impl」というルールがあります.
これによりSpring Data JPAはSpring Beanとして認識して登録して管理することができます.
Implの代わりに別の名前を使用する場合は、次の2つの方法のいずれかを使用します.
<repositories base-package="study.datajpa.repository"
repository-impl-postfix="Impl" />
@EnableJpaRepositories(basePackages = "study.datajpa.repository",
repositoryImplementationPostfix = "Impl")
Spring Data 2.xから実装クラスは「リポジトリインタフェース名+Impl」に置き換えられます.「カスタムインタフェース名+Impl」方式もサポートされています.
つまり、MemberRepositoryCustomImplではなく、MemberRepositoryCustomImplのようにすることができます.
@RequiredArgsConstructor
// MemberRepositoryCustom(사용자 정의 인터페이스 명) + Impl
public class MemberRepositoryCustomImpl implements MemberRepositoryCustom {
private final EntityManager em;
@Override
public List<Member> findMemberCustom() {
return em.createQuery("select m from Member m")
.getResultList();
}
}
実際の作業では、通常、QueryDSLまたはSpringJdbcTemplateを使用するときにカスタムライブラリ機能が使用されます.Reference
この問題について(Spring Data JPA、カスタムリポジトリ), 我々は、より多くの情報をここで見つけました https://velog.io/@yebali/Spring-Data-JPA-사용자-정의-리포지토리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol