java - 是否可以在 Spring Data Rest 中使用和组合 WHERE 子句?
问题描述
我正在使用 Spring Boot、Spring Data 编写应用程序。我正在尝试根据不同的过滤器参数实现过滤功能。
我发现了开箱即用的 Spring Data REST 框架,它支持基本的过滤操作,例如:
/myEntities?field1=value1&field2=value2&sort=field2,desc&size=10&page=2
在这种情况下,我们只过滤 2 个字段,没有任何额外的 where 子句。
但是,如果我需要一个更复杂的过滤器,它对我的实体具有不同数量的 where 子句、顺序、限制,该怎么办?结果查询可能如下所示:
SELECT * FROM table
WHERE field1 != `value1` and (field1 != ` value2 `OR (field1 = `value3` AND filed2 < 3))
AND field2 != 99
是否可以使用 Spring Data Rest 的内置功能(将所有这些东西作为 http 参数发送)来实现不同 where 子句的组合?
解决方案
您应该能够自定义您的存储库以使用包含所有必需参数的搜索方法。然后,它们将在搜索资源下与所有查询参数一起暴露给 Spring Data Rest。
就像是:
@RestResource(path = "weirdFilter", rel = "weirdFilter")
@Query(value = "SELECT * FROM table
WHERE field1 != :value1 and (field1 != :value2 OR (field1 = :value3 AND field2 < 3))
AND field2 != 99")
public Page<Stuff> findByWeirdFilter(@Param("value1") String value1, @Param("value2") String value2, @Param("value3") String value3, Pageable p);
推荐阅读
- php - 会话开始后仍然显示登录页面
- python - 同一个csv中的多个工作表
- php - 类 App\Http\Request\CreatePost 不存在
- mysql - Angular 7:更新和删除功能不起作用
- office-js - 寻找“Outlook 加载项的保存功能”
- python - 如何改进我的代码以使其运行得更快?
- javascript - 如何设置我的文本在 3 秒后出现的超时时间?
- javascript - Angular8 和全日历组件
- ruby-on-rails - 是否有任何探索使用 Web 组件的 RoR 项目?
- angular - 由模态响应确定的 Mat-checkbox 选中属性