Java Play框架查找器与if else查询



我写了下面一段代码来做选择性查询,但它似乎不起作用。

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();
}

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

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

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

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<>();

最新更新