sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cuál es la diferencia entre MongoTemplate y MongoRepository de Spring Data?

"Conveniente" y "poderoso de usar" son objetivos contradictorios hasta cierto punto. Los repositorios son mucho más convenientes que las plantillas, pero estas últimas, por supuesto, le brindan un control más detallado sobre qué ejecutar.

Como el modelo de programación del repositorio está disponible para varios módulos de Spring Data, encontrará documentación más detallada en la sección general de los documentos de referencia de Spring Data MongoDB.

TL;RD

En general, recomendamos el siguiente enfoque:

  1. Comience con el resumen del repositorio y simplemente declare consultas simples utilizando el mecanismo de derivación de consultas o consultas definidas manualmente.
  2. Para consultas más complejas, agregue métodos implementados manualmente al repositorio (como se documenta aquí). Para la implementación use MongoTemplate .

Detalles

Para su ejemplo, esto se vería así:

  1. Defina una interfaz para su código personalizado:

    interface CustomUserRepository {
    
      List<User> yourCustomMethod();
    }
    
  2. Agregue una implementación para esta clase y siga la convención de nomenclatura para asegurarse de que podamos encontrar la clase.

    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. Ahora deje que su interfaz de repositorio base amplíe la personalizada y la infraestructura utilizará automáticamente su implementación personalizada:

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

De esta manera, básicamente tienes la opción:todo lo que sea fácil de declarar va a UserRepository , todo lo que se implementa mejor manualmente va a CustomUserRepository . Las opciones de personalización están documentadas aquí.