java - 如何向querydsl Predicate添加比较器?
问题描述
我有以下网络服务,可自动将获取参数查询转换为数据库选择:
public interface PersonRepo extends
JpaRepository<Person, Long>,
QuerydslPredicateExecutor<Person> {
}
@GetMapping
public ResponseEntity getFiltered(
@QuerydslPredicate(root = Person.class) Predicate predicate, Pageable pageable) {
return ResponseEntity.ok(personRepo.findAll(predicate, pageable)));
)
}
例如可以执行以下查询:
GET /people?name=John&age=18
GET /people?name=John&age=18&page=1&sort=name,desc
问题:我想按如下方式应用比较器查询:
GET /people?name=John&age>18
GET /people?name=John&age>18&age<30
GET /people?name=John&age<30
问题:我怎么能做到这一点?至少后面的查询不起作用。
解决方案
您可以使用单个绑定并使用查询 DSL 值运算符中的表达式。
public interface PersonRepo extends
JpaRepository<Person, Long>,
QuerydslPredicateExecutor<Person>,
QuerydslBinderCustomizer<Person> {
default void customize(final QuerydslBindings bindings, final QPerson person) {
bindings.bind(cache.age).all((path, values) -> ExpressionProviderFactory.getPredicate(path, values));
}
}
推荐阅读
- python - 检查一列是否包含来自其他列的值并填充第三列(真或假)
- php - PHP 从多个 HTML 复选框更新 SQL
- c++ - 将检测到的 2D 地图调整为参考 2D 地图
- angularjs - 日期选择器在 angularjs ng-template 脚本中不起作用
- javascript - 比较两个嵌套对象数组
- react-native - React Native - 动画视图在 Android 上摇摇欲坠
- vuejs2 - Vue2.js - 在自定义插件中使用自定义组件 - 如何传递道具?
- react-native - 我如何将文件从 react native 上传到 .net core api
- ios - 检测具有良好对比度和纹理的图像
- ios - Cordova iOS 应用程序以 iOS 7 风格运行