当前位置: 首页 > 知识库问答 >
问题:

Spring Data REST的QueryDSL集成是否可以用于执行更复杂的查询?

方昊
2023-03-14

我目前正在构建一个REST API,我希望客户机能够在其中轻松地过滤特定实体的大多数属性。将QueryDSL与Spring Data REST结合使用(Oliver Gierke的一个示例),允许客户机通过组合引用属性的查询参数(例如/users?firstname=dennis&lastname=laumen)进行筛选,从而使我可以轻松地获得我想要的内容的90%。

我甚至可以通过实现QueryDSLBinderCustomizer接口(例如,对于不区分大小写的搜索或部分字符串匹配)自定义查询参数和实体属性之间的映射。这是很好的,但我也希望客户机能够过滤一些类型使用范围。例如,对于date of birding这样的属性,我希望执行如下操作:/users?dateofbirthfrom=1981-1-1&dateofbirthto=1981-12-31。基于数字的属性/users?idfrom=100&idto=200也是如此。我觉得使用QueryDSLBinderCustomizer接口应该可以做到这一点,但这两个库之间的集成并没有大量的文档。

最后,使用Spring Data REST和QueryDSL是否可能做到这一点?如果是,怎么做?

共有1个答案

祁杰
2023-03-14

我认为您应该能够使用以下自定义来使其工作:

bindings.bind(user.dateOfBirth).all((path, value) -> {

  Iterator<? extends LocalDate> it = value.iterator();
  return path.between(it.next(), it.next());
});

这里的关键是使用?dateofbirth=…&dateofbirth=(两次使用该属性)和….all(…)绑定,这将使您能够访问提供的所有值。

确保您将@datetimeformat批注添加到userdateofborne属性中,以便Spring能够将传入的字符串正确转换为localdate实例。

lambda当前获得一个集合<?扩展了t>,这使得解开单个元素的纠缠变得更加痛苦,但我认为我们可以在以后的发行版中对此进行更改,以公开列表

 类似资料:
  • 问题内容: 我目前正在构建一个REST API,我希望客户端可以在其中轻松过滤特定实体的大多数属性。通过将QueryDSL与Spring Data REST结合使用,我可以通过允许客户端通过组合引用属性(例如)的查询参数进行过滤,轻松达到我想要的90%。 我什至可以通过实现QuerydslBinderCustomizer接口来自定义查询参数与实体属性之间的映射(例如,不区分大小写的搜索或部分字符串

  • 例如,JPA标准API可以在没有生成元模型的情况下使用。失去了类型安全性,但我可以在运行时仅使用反射来创建查询,而无需事先了解数据模型。我想以同样的方式使用Querydsl。我不关心类型安全问题,因为我不知道数据模型。 在我最近的项目中,我想使用Querydsl,主要是因为它构成了持久性之上的另一层。所以我希望可以在JPA、JDO、JDBC、Lucene、Hibernate Search、Mong

  • 问题内容: 是否有可能以某种方式停止或终止JavaScript,从而防止再次发生基于JavaScript的执行,而无需重新加载浏览器? 我在想JavaScript等同于PHP。 问题答案: 简短答案: 如果您想了解更多,请继续阅读。 您是否要停止JavaScript的开发/调试工作? 代码中的表达式将停止页面执行,然后您的浏览器开发人员工具将使您可以查看页面冻结时的状态。 您是否要故意停止设计您的

  • 问题内容: 我正在构建一个将获得大量流量的PHP应用程序。我一直了解到,我应该限制SQL查询的数量(目前,每个访问者大约有15个)。我可以将其限制为使用PHP进行数据过滤和排序的一半左右,但这会更快吗?另外,我可以在查询中使用“ JOIN”来减少查询数量,但这真的比执行多个查询快吗?谢谢! 问题答案: 如果每个访问者有15个查询,则除非您的应用程序很大,否则您很可能做错了什么。 使用PHP而不是M

  • 我有两个依赖于另一个模块(C)的模块(A,B)。模块A将消息通道配置为Bean,模块C具有带有模块A配置的请求通道的消息网关。模块B不引用此消息网关,因此不配置请求通道。 在正常的服务器启动中,所有模块都已加载,并且工作正常,因为模块A为网关提供了MessageChannel Bean。 如果我测试模块B,由于缺少MessageChannel Bean,无法加载模块c中的MessagingGate

  • 问题内容: 假设表格具有名称,ID,年龄,性别,学历等。ID是关键,并且该表也按名称,年龄和性别进行索引。我需要所有25岁以上的男学生,按其姓名排序。 这在mySQL中很简单: IndexDB允许创建索引并根据该索引对查询进行排序。但是它不允许多个查询,例如年龄和性别。我发现了一个名为queryIndexedDB的小型库,该库允许复合查询,但不提供排序结果。 那么,在使用IndexedDB时,有没