【发布时间】:2018-06-30 20:57:54
【问题描述】:
我在我的 Spring Boot 项目中使用 QueryDSL 并计划使用 Spring 的 Web 支持 (current query dsl web docs)。问题是,我找不到任何关于使用不同运算符的信息。如何定义not equals 或matches regex 操作?乍一看,它所做的只是将您的?fieldname=value 格式GET 请求转换为您在存储库中设置的预定义操作。我可以扩展它以允许对同一字段进行多次操作吗?
示例:
目前我可以通过传递 URL 参数获得 QueryDsl Predicate,例如 ?user.company.id=1:
@Controller
class UserController {
@Autowired UserRepository repository;
@RequestMapping(value = "/", method = RequestMethod.GET)
Page<User> getUsers(@QuerydslPredicate(root = User.class) Predicate predicate,
Pageable pageable) {
return repository.findAll(predicate, pageable);
}
}
但正如我链接的文档所述,我只能为某个字段定义一个操作。如果我想要用户,其中user.lastName 以某些内容开头并且仍然保留查询精确匹配的可能性? (?lastName=Xyz,contains 和 ?lastName=Xyz,equals 可能)
QuerydslBinderCustomizer 定义了每个字段的操作,但您只能定义如何处理该特定字段,不可能添加多个操作。
也许我不能用 QueryDSL 做到这一点,但是通常在 Spring Boot 中你如何将过滤器应用于搜索查询?
【问题讨论】:
-
请尝试明确说明并说明您要达到的目标:stackoverflow.com/help/how-to-ask。例如,告诉我们您想发送什么查询以及您期望的结果。
标签: spring spring-boot spring-data-jpa querydsl