我写了下面一段代码来做选择性查询,但它似乎不起作用。
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<>();