使用 spring/querydsl

问题描述

我使用带有 Web 支持的 Spring Data/QueryDSL,使用注释 @EnableSpringDataWebSupport。 这很有效,并自动将 GET 查询映射到 Predicate。我可以使用以下查询搜索我的 DTP 对象:

http://localhost/search/dtp?name=foo

我现在需要添加更复杂的查询,例如 AND 或 OR 子句。

我发现这个库似乎实现了我想要的:spring-data-querydsl-value-operators

我的理解是,我需要将以下代码添加到我的 Repository 接口中以利用此库:

@Override
default void customize(QuerydslBindings bindings,QDtp root) {
    bindings.bind(root.name).all(ExpressionProviderFactory::getPredicate);
    bindings.bind(root.description).all(ExpressionProviderFactory::getPredicate);
    ...
}

但是我以前不需要 customize() 方法,现在看来我需要为我的对象的所有字段和子字段设置这些新绑定。这可能会导致维护问题:如果添加一个新字段,但开发人员忘记添加此绑定,那么对该字段的搜索将无法像其他字段一样进行。

以前不是这样。

如何才能使这些绑定通用并应用于对象的所有字段和子字段?

解决方法

我认为你可以使用这个库:https://github.com/turkraft/spring-filter

它将让您运行搜索查询,例如:

/search?filter= average(评分)> 4.5 brand.name ('奥迪'、'路虎')(年份> 2018公里 50000)和颜色“白色”事故为空

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...