2

Есть ли что-то вроде JPA Технические характеристики для данных Spring MongoDB Repositories?Весенние данные MongoDB Repository - JPA Технические характеристики, такие как

Если нет, как я могу сделать динамические запросы с репозиториями?

Классический сценарий может быть формой поиска с необязательными полями, которые пользователь заполнит.

ответ

3

Я нашел себе путь.

Трюк может быть сделано с помощью QueryDSL, следующим образом:

Во-первых, добавить зависимости QueryDSL:

<dependency> 
    <groupId>com.mysema.querydsl</groupId> 
    <artifactId>querydsl-mongodb</artifactId> 
    <version>${querydsl-mongo.version}</version> 
</dependency> 

<dependency> 
    <groupId>com.mysema.querydsl</groupId> 
    <artifactId>querydsl-apt</artifactId> 
    <version>${querydsl-mongo.version}</version> 
</dependency> 

Затем настроить плагин для создания классов метамодели (их имена будут такими же, из документов с буквой Q как префикс: например QUser).

<build> 
     <plugins> 
      .... 
      <plugin> 
       <groupId>com.mysema.maven</groupId> 
       <artifactId>apt-maven-plugin</artifactId> 
       <version>1.1.3</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>process</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>target/generated-sources/java</outputDirectory> 
          <processor>org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor</processor> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

Обратите внимание на класс процессора: это не QueryDSL по умолчанию один com.mysema.query.apt.morphia.MorphiaAnnotationProcessor, но Spring Data MongoDB один org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor: Монго

Spring Data обеспечивает пользовательский процессор APT для генерации метамоделейвместо того, который предоставлен в QueryDSL, он сканирует 10 Spring специфический @Document вместо специфических аннотаций Morphia.

Теперь мы можем сделать наш репозиторий интерфейс расширения QueryDslPredicateExecutor<T>:

public interface UserRepository extends MongoRepository<User, String>, QueryDslPredicateExecutor<User>, 
     QuerydslBinderCustomizer<QUser> { 
} 

Теперь мы можем определить Предикаты при запросе хранилищу:

QUser user = QUser.user;    
BooleanExpression predicate = user.name.containsIgnoreCase("John");   
userRepository.findAll(predicate); 

QuerydslBinderCustomizer помогает вам определить связывание документа свойства (см. Spring documentation для дальнейшей помощи).

0

Это обновление от:

<spring.version>4.3.4.RELEASE</spring.version> 
<querydsl.version>4.1.3</querydsl.version> 
<spring.data.mongodb.version>1.9.5</spring.data.mongodb.version> 

использование

... 
      <plugin> 
      <groupId>com.mysema.maven</groupId> 
      <artifactId>apt-maven-plugin</artifactId> 
      <version>1.1.3</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>process</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>target/generated-sources/java</outputDirectory> 
         <processor>org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor</processor> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
... 

    <dependency> 
     <groupId>com.querydsl</groupId> 
     <artifactId>querydsl-mongodb</artifactId> 
     <version>${querydsl.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>com.querydsl</groupId> 
     <artifactId>querydsl-apt</artifactId> 
     <version>${querydsl.version}</version> 
    </dependency> 

 Смежные вопросы

  • Нет связанных вопросов^_^