MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Quelle est la différence entre MongoTemplate de Spring Data et MongoRepository ?

"Pratique" et "puissant à utiliser" sont des objectifs contradictoires dans une certaine mesure. Les référentiels sont de loin plus pratiques que les modèles, mais ces derniers vous donnent bien sûr un contrôle plus précis sur ce qu'il faut exécuter.

Comme le modèle de programmation du référentiel est disponible pour plusieurs modules Spring Data, vous trouverez une documentation plus détaillée à ce sujet dans la section générale des documents de référence Spring Data MongoDB.

TL;DR

Nous recommandons généralement l'approche suivante :

  1. Commencez par le résumé du référentiel et déclarez simplement des requêtes simples à l'aide du mécanisme de dérivation des requêtes ou des requêtes définies manuellement.
  2. Pour les requêtes plus complexes, ajoutez des méthodes mises en œuvre manuellement au référentiel (comme documenté ici). Pour l'implémentation, utilisez MongoTemplate .

Détails

Pour votre exemple, cela ressemblerait à ceci :

  1. Définissez une interface pour votre code personnalisé :

    interface CustomUserRepository {
    
      List<User> yourCustomMethod();
    }
    
  2. Ajoutez une implémentation pour cette classe et suivez la convention de dénomination pour vous assurer que nous pouvons trouver 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. Laissez maintenant votre interface de référentiel de base étendre l'interface personnalisée et l'infrastructure utilisera automatiquement votre implémentation personnalisée :

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

De cette façon, vous avez essentiellement le choix :tout ce qui est facile à déclarer va dans UserRepository , tout ce qui est mieux implémenté manuellement va dans CustomUserRepository . Les options de personnalisation sont documentées ici.