스프링 데이터와 mongodb를 사용하여 복잡한 쿼리를 수행 할 수있는 응용 프로그램을 작성해야합니다. 나는 MongoRepository를 사용하여 시작했지만 예제를 찾거나 실제로 구문을 이해하기 위해 복잡한 쿼리로 고생했습니다.Spring Data의 MongoTemplate과 MongoRepository의 차이점은 무엇입니까?
이 같은 질의에 대해 이야기하고있다 :
@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
? 둘 다 성숙합니까? 아니면 그 중 하나가 더 많은 기능을 갖고 있지 않습니까?
안녕 Oliver,이 실제로 작동하지 않습니다. spring-data는 사용자 정의 이름에서 질의를 자동으로 생성하려고 시도합니다. yourCustomMethod(). "당신"은 도메인 클래스의 유효한 필드가 아닙니다. 매뉴얼을 따라 갔다가 spring-data-jpa-examples을 어떻게 사용하는지 두 번 확인했습니다. 불운. 스프링 데이터는 사용자 인터페이스를 저장소 클래스로 확장하자마자 항상 자동 생성을 시도합니다. 유일한 차이점은 MongoRepository가 CrudRepository가 아니라는 것입니다. 반복자를 사용하지 않으려 고합니다. 당신이 힌트를 가지고 있다면 그것은 인정 될 것입니다. –
가장 일반적인 실수는 구현 클래스의 이름을 잘못 지정하는 것입니다. 기본 저장소 인터페이스의 이름이 YourRepository 인 경우 구현 클래스의 이름을 YourRepositoryImpl로 지정해야합니다. 그럴까요? 그렇다면 GitHub 등의 샘플 프로젝트를 살펴 보니 기쁩니다. –
안녕하세요 Oliver, Impl 클래스의 이름이 잘못 지정되었습니다. 이름을 조정했는데 지금은 작동하는 것처럼 보입니다. 귀하의 의견에 대단히 고마워요. 이 방법으로 다른 종류의 쿼리 옵션을 사용할 수있게되어 정말 좋습니다. 잘 생각했습니다! –