MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Qual è la differenza tra MongoTemplate e MongoRepository di Spring Data?

"Comodo" e "potente da usare" sono obiettivi in ​​una certa misura contraddittori. I repository sono di gran lunga più convenienti dei modelli, ma questi ultimi ovviamente ti danno un controllo più dettagliato su cosa eseguire.

Poiché il modello di programmazione del repository è disponibile per più moduli Spring Data, troverai una documentazione più approfondita nella sezione generale dei documenti di riferimento di Spring Data MongoDB.

TL;DR

In genere consigliamo il seguente approccio:

  1. Inizia con l'abstract del repository e dichiara semplicemente query semplici utilizzando il meccanismo di derivazione delle query o query definite manualmente.
  2. Per query più complesse, aggiungi metodi implementati manualmente al repository (come documentato qui). Per l'implementazione usa MongoTemplate .

Dettagli

Per il tuo esempio questo sarebbe simile a questo:

  1. Definisci un'interfaccia per il tuo codice personalizzato:

    interface CustomUserRepository {
    
      List<User> yourCustomMethod();
    }
    
  2. Aggiungi un'implementazione per questa classe e segui la convenzione di denominazione per assicurarti di poter trovare la classe.

    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. Ora lascia che l'interfaccia del tuo repository di base estenda quella personalizzata e l'infrastruttura utilizzerà automaticamente la tua implementazione personalizzata:

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

In questo modo hai essenzialmente la scelta:tutto ciò che è facile dichiarare va in UserRepository , tutto ciò che è meglio implementato manualmente va in CustomUserRepository . Le opzioni di personalizzazione sono documentate qui.