如何在Ebean查询中动态包含表达式?

时间:2016-09-13 18:45:27

标签: playframework ebean

我有一个搜索应用程序,其中许多条件组合成'和'或'列表。

根据用户输入,其中一些可以为null,如果它们为null,则不应考虑这些值。

示例:

 public static PagedList<Profile> exampleForSO(String param1, String params2, Integer number, Double d, Boolean condition1, Boolean condition2) {

        return find.where().ieq("param1", param1).
                ieq("param2", params2).
                eq("number", number).
                // based on the fact if condition1 is null include an eq("condition", condition1); block
                // based on the fact if condition2 is null include an eq("condition", condition1); block
            // if param1.equals("test") create an expression .eq("param1", param1).

        findPagedList();
    }

我可以使用一些if else块来解决这个问题并根据该条件返回结果,但是有超过12个不同的条件,因此如果它们为null则只有排除它们的可靠方法才会很棒。

我也可以创建许多不同的方法,但必须有一些更聪明的方法。

此外,条件不必为null,但可能有一些特定的值使它们在查询中过时,例如:

params1.equals("something"); 

不要包含它,因为“某些东西”无论如何都不会改变搜索结果。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以使用 find.where()返回的 ExpressionList&lt;&gt; 对象,并动态添加条件。

e.g:

        ExpressionList<Profile> expressionList =  find.where();
        expressionList.ieq("param1", param1);
        expressionList.eq("param2", param2);
        if(condition1){
           expressionList.eq("...", ...);
        }
        if(condition2){
           expressionList.ieq("...", ...);
        }

祝你好运