spring-data-mongodb有一个非常好用且简单的查询构建器。我有多个搜索参数,我想搜索,可能会提供一些或不提供。这在spring-data-mongodb中非常简单地实现,并且它利用了Pageable和Page类:
Query query = new Query().with(pageable);
if (searchParameters.getPublished() != null) {
query.addCriteria(Criteria.where("published").is(searchParameters.getPublished()));
}
List<Property> propertyList = mongoTemplate.find(query, Property.class);
long count = mongoTemplate.count(query, Property.class);
List<PropertySummary> propertySummaryList = propertyList.stream()
.map(propertyConverter::convert)
.collect(Collectors.toList());
return new PageImpl<>(propertySummaryList, pageable, count);
spring-data-jpa中是否存在类似的内容?从花一天时间环顾四周,我会说不。有一个标准api但是它没有与可分页和页面类集成,这非常烦人。 spring-data-jpa似乎非常适合为您编写查询方法,您希望始终在单个字段上进行搜索。但是,如果你不想做任何远远超过findCusomterByLastName(String lastName)
的事情,图书馆会很快崩溃。如果你指定了多个参数,那么它们实际上必须为搜索设置一些东西,如果其中一个为null,那么它将匹配值为null的字段。
规范api似乎是一个好主意,但你必须能够在一个流利的声明中定义你的查询。如果你想有条件地将规格添加到一起,api会很快崩溃。
QueryDslPredicateExecutor允许与面上的QueryDSL库集成似乎很有用。然而,它在很大程度上依赖于注释后处理器为您自动生成代码。这很棒,但只增加了创建类型安全查询的功能。然后,您可以将谓词传递给您的存储库,但这似乎很快就会崩溃。如何将谓词组合在一起?我找到的唯一方法是通过Specifications.where().and()
使用它们并不是很好(参见上一段)。
有没有其他人分享这些挫折感?这似乎是一个简单的要求。我错过了spring-data-jpa中的某些内容吗?
答案 0 :(得分:2)
最简单的选项是按示例查询:http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#query-by-example
何时使用
<强>限制强>
再看看这个问题:Dynamic spring data jpa repository query with arbitrary AND clauses