Хотя MongoRepository намного проще в использовании, чем MongoTemplate, но шаблон дает вам более точный контроль над выполняемыми запросами.
Сказав, что вы все еще можете реализовывать сложные запросы при использовании MongoRepository, как это:
@Query("{'id': ?#{ [0] ? {$exists :true} : [1] }}")
List<Person> findByQueryWithExpressionAndNestedObject(boolean param0, String param1);
Более подробную информацию можно найти здесь
Но, на практике, хорошо иметь и то и другое в вашем коде, то есть
- Используйте хранилище, если вы хотите использовать уже реализованное.
- Вручную реализовать несколько пользовательских методов, используя
mongo-template
, если вы хотите реализовать customMethod, который имеет сложную логику.
Осуществление
Шаг 1:
interface CustomEmployeeRepository{
List<Employee> CustomEmployeeMethod(String field)
}
Шаг 2:
public class CustomEmployeeRepositoryImpl implements CustomEmployeeRepository{
@Autowired
private MongoTemplate mongotemplate;
@Override
List<Employee> CustomEmployeeMethod(String field){
}
}
Шаг 3:
Теперь создайте новый репозиторий, расширяющий MongoRepository
и CustomEmployeeRepository
для использования пользовательских реализаций, а также предопределенных методов репозитория.
interface EmployeeRepository extends MongoRepository<Employee, long>, CustomEmployeeRepository{
}
Таким образом, вы получаете лучшее из обоих миров. Обратитесь к документации для получения дополнительной информации о реализации.
Надеюсь, это поможет.