gpt4 book ai didi

spring-data-jpa - 使用可选参数搜索

转载 作者:行者123 更新时间:2023-12-04 07:18:30 25 4
gpt4 key购买 nike

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

  • 限制
  • 不支持嵌套/分组属性约束,例如 firstname = ?0 或 (firstname = ?1 and lastname = ?2)
  • 仅支持字符串的开始/包含/结束/正则表达式匹配和其他属性类型的精确匹配

  • 也看看这个问题: Dynamic spring data jpa repository query with arbitrary AND clauses

    关于spring-data-jpa - 使用可选参数搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40289540/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com