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 但它没有与 pageable 和 page 类集成,这很烦人。 spring-data-jpa 似乎很擅长为您编写查询方法,以便您始终在单个字段上进行搜索。但是当你不想做任何比
findCusomterByLastName(String lastName)
更难的事情时,库很快就会崩溃。 .如果您指定多个参数,那么它们实际上都必须为搜索设置一些内容,如果其中一个为空,则它将匹配值为空的字段。规范 api 似乎是个好主意,但您必须能够在单个流畅的声明中定义您的查询。如果您想有条件地将规范添加到一起,则 api 很快就会分崩离析。
QueryDslPredicateExecutor 允许在面部与 QueryDSL 库集成似乎很有用。然而,它在很大程度上依赖于注释后处理器为您自动生成代码。这很好,但只增加了创建类型安全查询的能力。然后您可以将谓词传递给您的存储库,但这似乎很快就会崩溃。如何将谓词组合在一起?我发现的唯一方法是通过
Specifications.where().and()
使用它们这不是很好(见上一段)。有没有其他人分享这些挫折?这似乎是一个如此简单的要求。我错过了 spring-data-jpa 中的某些内容吗?
最佳答案
最简单的选项是 示例查询 :http://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#query-by-example
何时使用
打破现有查询
数据存储 API
限制
也看看这个问题:Dynamic spring data jpa repository query with arbitrary AND clauses
关于spring-data-jpa - 使用可选参数搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40289540/