使用Spring BOOT REST和Spring Data JPA使用Criteria API实现复杂的搜索功能



我需要使用 SpringBoot REST实现复杂的搜索功能,并使用 Criteria API 实现Spring Data JPA。我需要提供如下所示的 RPI/college?select=*&where=name:DemoCollegelocation:LAstaff{firstName:foo, lastName:boo, workExp>10}并输入[1,2,3]

拼贴对象具有namelocationtype字段和staff列表。 它与Staffonetomany关系College因此可以有一名或多名工作人员。

根据 uri,我需要使用条件 API 构建查询。

我发现实现toPredicate()方法非常复杂org.springframework.data.jpa.domain.Specification.有没有处理如此复杂的搜索过滤器的这样的例子?

提前谢谢。

我认为在您的情况下,最好的选择是规范-arg-解析器库,它提供了以声明方式构建规范的便捷方式。例如,此代码:

@RequestMapping("/customers")
public Object findByName(
@And({
@Spec(path="registrationDate", params="registeredBefore", spec=DateBefore.class),
@Spec(path="lastName", spec=Like.class)}) Specification<Customer> customerSpec) {
return customerRepo.findAll(customerSpec);
}

对应于此请求:

GET http://myhost/customers?registeredBefore=2015-01-18&lastName=Simpson

它支持以下规范:Like,LikeIgnoreCase,Equal,EqualIgnoreCase,In,Null,NotNull,GreaterThan,GreaterThanOrEqual,LessThan,LessThanOrEqual,DateBetween,Join,Join fetch,它允许您组合它们,组成复杂的表达式。


另一个选项是Querydsl和Web支持Spring Data扩展。它还允许您构建"REST 查询语言",但可能性较小。你可以在我的回答中阅读如何使用它:https://stackoverflow.com/a/48596145

相关内容

  • 没有找到相关文章

最新更新