MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Was ist der Unterschied zwischen MongoTemplate und MongoRepository von Spring Data?

„Bequem“ und „leistungsfähig in der Anwendung“ sind bis zu einem gewissen Grad widersprüchliche Ziele. Repositories sind bei weitem praktischer als Vorlagen, aber letztere geben Ihnen natürlich eine genauere Kontrolle darüber, was ausgeführt werden soll.

Da das Repository-Programmiermodell für mehrere Spring Data-Module verfügbar ist, finden Sie eine ausführlichere Dokumentation dazu im allgemeinen Abschnitt der Spring Data MongoDB-Referenzdokumentation.

TL;DR

Wir empfehlen im Allgemeinen die folgende Vorgehensweise:

  1. Beginnen Sie mit dem Repository-Abstract und deklarieren Sie einfach einfache Abfragen mithilfe des Abfrageableitungsmechanismus oder manuell definierter Abfragen.
  2. Fügen Sie für komplexere Abfragen manuell implementierte Methoden zum Repository hinzu (wie hier dokumentiert). Verwenden Sie für die Implementierung MongoTemplate .

Einzelheiten

Für Ihr Beispiel würde das etwa so aussehen:

  1. Definieren Sie eine Schnittstelle für Ihren benutzerdefinierten Code:

    interface CustomUserRepository {
    
      List<User> yourCustomMethod();
    }
    
  2. Fügen Sie eine Implementierung für diese Klasse hinzu und befolgen Sie die Namenskonvention, um sicherzustellen, dass wir die Klasse finden können.

    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. Lassen Sie nun Ihre Basis-Repository-Schnittstelle die benutzerdefinierte erweitern, und die Infrastruktur verwendet automatisch Ihre benutzerdefinierte Implementierung:

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

Auf diese Weise haben Sie im Wesentlichen die Wahl:Alles, was einfach zu deklarieren ist, kommt in UserRepository , alles, was besser manuell implementiert ist, kommt in CustomUserRepository . Die Anpassungsoptionen sind hier dokumentiert.