sql >> データベース >  >> NoSQL >> MongoDB

Spring DataのMongoTemplateとMongoRepositoryの違いは何ですか?

    「便利」と「使い勝手」は、ある程度矛盾する目標です。リポジトリはテンプレートよりもはるかに便利ですが、テンプレートを使用すると、実行する内容をよりきめ細かく制御できます。

    リポジトリプログラミングモデルは複数のSpringDataモジュールで利用できるため、SpringDataMongoDBリファレンスドキュメントの一般的なセクションでより詳細なドキュメントを見つけることができます。

    TL; DR

    通常、次のアプローチをお勧めします。

    1. リポジトリの要約から始めて、クエリ派生メカニズムまたは手動で定義されたクエリを使用して単純なクエリを宣言するだけです。
    2. より複雑なクエリの場合は、手動で実装されたメソッドをリポジトリに追加します(ここに記載されています)。実装にはMongoTemplateを使用します 。

    詳細

    あなたの例では、これは次のようになります:

    1. カスタムコードのインターフェースを定義します:

      interface CustomUserRepository {
      
        List<User> yourCustomMethod();
      }
      
    2. このクラスの実装を追加し、命名規則に従って、クラスが見つかることを確認してください。

      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
        }
      }
      
    3. 次に、ベースリポジトリインターフェイスでカスタムインターフェイスを拡張すると、インフラストラクチャでカスタム実装が自動的に使用されます。

      interface UserRepository extends CrudRepository<User, Long>, CustomUserRepository {
      
      }
      

    このようにして、基本的に選択肢が得られます。宣言するのが簡単なものはすべて、UserRepositoryに入ります。 、手動で実装した方がよいものはすべてCustomUserRepositoryに入れられます 。カスタマイズオプションはここに記載されています。



    1. MemcacheとJavaメモリ

    2. 2つのフィールドを比較する際のMongoDbクエリ条件

    3. Hadoopおよび関連するビッグデータテクノロジーを備えたMongoDB®

    4. JSONドキュメントの配列からMongoDBにドキュメントをインポートする