「便利」と「使い勝手」は、ある程度矛盾する目標です。リポジトリはテンプレートよりもはるかに便利ですが、テンプレートを使用すると、実行する内容をよりきめ細かく制御できます。
リポジトリプログラミングモデルは複数のSpringDataモジュールで利用できるため、SpringDataMongoDBリファレンスドキュメントの一般的なセクションでより詳細なドキュメントを見つけることができます。
TL; DR
通常、次のアプローチをお勧めします。
- リポジトリの要約から始めて、クエリ派生メカニズムまたは手動で定義されたクエリを使用して単純なクエリを宣言するだけです。
- より複雑なクエリの場合は、手動で実装されたメソッドをリポジトリに追加します(ここに記載されています)。実装には
MongoTemplate
を使用します 。
詳細strong>
あなたの例では、これは次のようになります:
-
カスタムコードのインターフェースを定義します:
interface CustomUserRepository { List<User> yourCustomMethod(); }
-
このクラスの実装を追加し、命名規則に従って、クラスが見つかることを確認してください。
class UserRepositoryImpl implements CustomUserRepository { private final MongoOperations operations; @Autowired public UserRepositoryImpl(MongoOperations operations) { Assert.notNull(operations, "MongoOperations must not be null!"); this.operations = operations; } public List<User> yourCustomMethod() { // custom implementation here } }
-
次に、ベースリポジトリインターフェイスでカスタムインターフェイスを拡張すると、インフラストラクチャでカスタム実装が自動的に使用されます。
interface UserRepository extends CrudRepository<User, Long>, CustomUserRepository { }
このようにして、基本的に選択肢が得られます。宣言するのが簡単なものはすべて、UserRepository
に入ります。 、手動で実装した方がよいものはすべてCustomUserRepository
に入れられます 。カスタマイズオプションはここに記載されています。