Можем ли мы использовать MongoRepository и MongoTemplate в одном приложении - PullRequest
0 голосов
/ 05 мая 2018

Мне нужно написать несколько сложных запросов в MongoDB и несколько простых запросов. Могу ли я использовать MongoRepository для простых запросов и MongoTemplate вместе с Query или Criteria для реализации сложных запросов в одном приложении.

Это хороший дизайн с использованием MongoTemplate и MongoRepositories в одних и тех же приложениях. Есть ли у этого подхода недостатки?

Также, каков наилучший подход для написания сложных запросов с большим количеством предикатов, который включает и, или, IN и Not In в одном запросе.

1 Ответ

0 голосов
/ 05 мая 2018

Хотя MongoRepository намного проще в использовании, чем MongoTemplate, но шаблон дает вам более точный контроль над выполняемыми запросами.

Сказав, что вы все еще можете реализовывать сложные запросы при использовании MongoRepository, как это:

@Query("{'id': ?#{ [0] ? {$exists :true} : [1] }}")
List<Person> findByQueryWithExpressionAndNestedObject(boolean param0, String param1);

Более подробную информацию можно найти здесь

Но, на практике, хорошо иметь и то и другое в вашем коде, то есть

  1. Используйте хранилище, если вы хотите использовать уже реализованное.
  2. Вручную реализовать несколько пользовательских методов, используя 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{
}

Таким образом, вы получаете лучшее из обоих миров. Обратитесь к документации для получения дополнительной информации о реализации. Надеюсь, это поможет.

...