可以很容易地使用 JDO 语法来查询多个参数,如下所示:
//specify the persistent entity you're querying and you filter usign params
query = pm.newQuery(MyClass.class, " customer == paramCustomer && date >= paramStartDate && date <=paramEndDate ");
// declare params used above
query.declareParameters("com.google.appengine.api.users.User paramCustomer, java.util.Date paramStartDate, java.util.Date paramEndDate");
//pass the object declared as params
MyClassList = (List<MyClass>) query.execute(user, startDate, endDate);
使用过滤器以编程方式构建字符串很简单:
"customer == paramCustomer && date >= paramStartDate && date <=paramEndDate"
另一个带有 params 声明的字符串:
"com.google.appengine.api.users.User paramCustomer, java.util.Date paramStartDate, java.util.Date paramEndDate"
不是立即提出一个策略来执行查询,具体取决于过滤器中的哪些参数(并且已被声明),因此您最终会得到一些非常丑陋的临时级联 if-else 语句查询执行的可能排列(所有参数,只有第一个,只有第二个,第一个和第二个等......):
MyClassList = (List<MyClass>) query.execute(user, startDate, endDate);
我确信这是一项常见的任务,并且其他人正在以更通用和更有效的方式进行。
有什么建议吗?