我编写了以下代码来进行选择性查询,但它似乎并没有起作用。
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();
}
基本上我希望查询能够一起工作。只能通过名称,仅通过属性或两者。但只有一个功能。
这是不可能还是我做错了?
答案 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<>();