如何在多个参数上动态构建JDO查询
可以使用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) query.execute(user, startDate, endDate);
使用filter以编程方式构建字符串很简单:
"customer == paramCustomer && date >= paramStartDate && date <=paramEndDate"
与params声明的另一个str :::
"com.google.appengine.api.users.User paramCustomer, java.util.Date paramStartDate, java.util.Date paramEndDate"
什么是不立即提出一个策略来执行查询取决于filter中的哪些参数(并已被声明),所以你最终得到一些非常丑陋和临时的级联if-else语句与所有查询执行的可能排列(所有参数,只有第一个,只有第二个,第一个和第二个……):
MyClassList = (List) query.execute(user, startDate, endDate);
我确信这是一项共同的任务,而其他人正在以更加通用和有效的方式开展这项工作。
有什么建议吗?
我在方法query.executeWithArray
找到了一个解决方案
这样我就可以动态地构建filter和参数声明,将实际对象加载到一个对象数组中,然后传递给上面提到的方法。
另一个重要的方法是executeWithMap
您可以使用它来按名称绑定参数。