s1m*_*r3d 3 spring dynamic-queries dynamicquery spring-data spring-data-mongodb
是否有像Spring Data MongoDB存储库的JPA规范?
如果没有,我如何使用存储库进行动态查询?
经典场景可以是具有用户将填充的可选字段的搜索表单.
我发现自己是一种方式.
可以使用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>
Run Code Online (Sandbox Code Playgroud)
然后,配置插件以创建Metamodels类(它们的名称将与字母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>
Run Code Online (Sandbox Code Playgroud)
注意处理器类:它不是QueryDSL默认的com.mysema.query.apt.morphia.MorphiaAnnotationProcessor,而是Spring Data MongoDB org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor:
Spring Data Mongo提供了一个自定义APT处理器来生成Metamodels而不是QueryDSL中提供的那个,它将扫描Spring特定的@Document而不是Morphia特定的注释.
现在我们可以扩展我们的存储库接口QueryDslPredicateExecutor<T>:
public interface UserRepository extends MongoRepository<User, String>, QueryDslPredicateExecutor<User>,
QuerydslBinderCustomizer<QUser> {
}
Run Code Online (Sandbox Code Playgroud)
我们现在可以在查询存储库时定义谓词:
QUser user = QUser.user;
BooleanExpression predicate = user.name.containsIgnoreCase("John");
userRepository.findAll(predicate);
Run Code Online (Sandbox Code Playgroud)
QuerydslBinderCustomizer帮助您定义Document属性的绑定(有关更多帮助,请参阅Spring文档).
| 归档时间: |
|
| 查看次数: |
3349 次 |
| 最近记录: |