Мне нужно написать приложение, с помощью которого я могу выполнять сложные запросы, используя spring-data и mongodb. Я начал использовать MongoRepository, но боролся со сложными запросами, чтобы найти примеры или понять Синтаксис.В чем разница между MongoTemplate и MongoRepository Spring Data?
Я говорю о запросах, как это:
@Repository
public interface UserRepositoryInterface extends MongoRepository<User, String> {
List<User> findByEmailOrLastName(String email, String lastName);
}
или использование запросов на основе JSON, который я пытался методом проб и ошибок, потому что я не получаю правильный синтаксис. Даже после чтения документации mongodb (нерабочий пример из-за неправильного синтаксиса).
@Repository
public interface UserRepositoryInterface extends MongoRepository<User, String> {
@Query("'$or':[{'firstName':{'$regex':?0,'$options':'i'}},{'lastName':{'$regex':?0,'$options':'i'}}]")
List<User> findByEmailOrFirstnameOrLastnameLike(String searchText);
}
После прочтения всей документации, кажется, что mongoTemplate
гораздо лучше документированы то MongoRepository
. Я имею в виду следующую документацию:
http://static.springsource.org/spring-data/data-mongodb/docs/current/reference/html/reference.html
Можете ли вы сказать мне, что это более удобный и мощный использовать? mongoTemplate
или MongoRepository
? Являются ли они такими же зрелыми или у кого-то из них больше нет функций, чем у другого?
Привет, Оливер, это на самом деле не работает. spring-data пытается автоматически генерировать запрос из пользовательского имени. yourCustomMethod(). Он скажет, что «ваш» не является допустимым полем в классе домена. Я выполнил руководство и также дважды проверил, как вы делаете это примеры spring-data-jpa. Не повезло. spring-data всегда пытается автоматически генерировать, как только я расширяю пользовательский интерфейс к классу репозитория. Единственное различие заключается в том, что я использую MongoRepository, а не CrudRepository, так как пока не хочу работать с Iterators. Если бы у вас был намек, это было бы оценено. –
Самая распространенная ошибка - назвать неправильный класс реализации: если ваш базовый интерфейс репо называется 'YourRepository', класс реализации должен быть назван' YourRepositoryImpl'. Это так? Если это так, я с удовольствием посмотрю пример проекта на GitHub или тому подобное ... –
Привет, Оливер, класс Impl был назван неправильным, как вы предполагали. Я скорректировал имя, и теперь он выглядит как его работа. Большое спасибо за ваши отзывы. Это действительно здорово, чтобы иметь возможность использовать различные варианты запросов таким образом. Ну продумал! –