Potrzebuję napisać aplikację, za pomocą której mogę wykonywać złożone zapytania za pomocą wiosennych danych i mongodb. Zaczynałem od używania MongoRepository, ale zmagałem się ze złożonymi zapytaniami, aby znaleźć przykłady lub faktycznie zrozumieć składnię.Jaka jest różnica między MongoTemplate a MongoRepository?
mówię zapytaniami tak:
@Repository
public interface UserRepositoryInterface extends MongoRepository<User, String> {
List<User> findByEmailOrLastName(String email, String lastName);
}
lub wykorzystanie JSON zapytań opartych który Próbowałem metodą prób i błędów, bo nie dostać prawo składni. Nawet po przeczytaniu dokumentacji mongodb (niepracujący przykład z powodu złej składni).
@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);
}
Po przeczytaniu całej dokumentacji wydaje się, że jest znacznie lepiej mongoTemplate
udokumentowane następnie MongoRepository
. Chodzi mi o następującej dokumentacji:
http://static.springsource.org/spring-data/data-mongodb/docs/current/reference/html/reference.html
Czy możesz mi powiedzieć, co jest bardziej wygodne i wydajne w użyciu? mongoTemplate
lub MongoRepository
? Czy oba są takie same, czy jedno z nich nie ma więcej cech niż drugie?
Cześć Oliver, to w rzeczywistości nie działa. spring-data próbuje automatycznie wygenerować zapytanie poza nazwą niestandardową. yourCustomMethod(). Mówi "twój" nie jest prawidłowym polem w klasie domeny. Postępowałem zgodnie z instrukcją, a także dwukrotnie sprawdzałem, w jaki sposób robisz to w spring-data-jpa-examples. Brak szczęścia. dane sprężyste zawsze próbują automatycznie generować, gdy tylko rozszerzę niestandardowy interfejs na klasę repozytorium. Jedyna różnica polega na tym, że używam MongoRepository, a nie CrudRepository, ponieważ nie chcę na razie pracować z Iteratorami. Jeśli masz wskazówkę, będzie to docenione. –
Najczęstszym błędem jest błędna nazwa klasy implementacji: jeśli twój bazowy interfejs repo nazywa się 'YourRepository', klasa implementacji musi mieć nazwę' YourRepositoryImpl'. Czy tak jest? Jeśli tak, z przyjemnością przyjrzę się przykładowemu projektowi na GitHub lub tym podobnym ... –
Witaj Oliver, klasa Impl została nazwana błędnie, jak zakładałeś. Poprawiłem nazwę i wygląda na to, że działa teraz. Dziękuję bardzo za Twoją opinię. To naprawdę fajne móc korzystać z różnego rodzaju opcji zapytania w ten sposób. Dobrze przemyślane! –