带有if else查询的Java Play Framework查找程序

时间:2014-06-20 11:20:52

标签: java playframework-2.0

我编写了以下代码来进行选择性查询,但它似乎并没有起作用。

public static List<Item> selectBy(String name, String attr) {
    Query<Item> find = myFinderInstance;
    if (name != null) {
        find.where().eq("name", name);
    }
    if (attr != null) {
        find.where().eq("attr", attr);
    }

    return find.findList();
}

基本上我希望查询能够一起工作。只能通过名称,仅通过属性或两者。但只有一个功能。

这是不可能还是我做错了?

1 个答案:

答案 0 :(得分:2)

您可以有条件地将params添加到ExpressionList,在这种情况下,如果所有参数都为null,它将返回所有对象:

import com.avaje.ebean.ExpressionList;
import static com.avaje.ebean.Expr.eq;

// ...

public static List<Item> findByNameAndAttr(String name, String attr) {

    ExpressionList<Item> myQuery = find.where();

    if (name != null) myQuery.add(eq("name", name));
    if (attr != null) myQuery.add(eq("attr", attr));

    return myQuery.findList();
}

如果您更喜欢空集,如果两个参数都是null,则只需选择条件:

if (name == null && attr == null) return new ArrayList<>();