Joh*_*dol 4 java google-app-engine jdo google-cloud-datastore
可以使用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);
Run Code Online (Sandbox Code Playgroud)
使用过滤器以编程方式构建字符串非常简单:
"customer == paramCustomer && date >= paramStartDate && date <=paramEndDate"
Run Code Online (Sandbox Code Playgroud)
和params声明的另一个strign:
"com.google.appengine.api.users.User paramCustomer, java.util.Date paramStartDate, java.util.Date paramEndDate"
Run Code Online (Sandbox Code Playgroud)
什么不是立即提出一个策略来执行查询取决于过滤器中的哪些参数(并已被声明),所以你最终得到了一些非常丑陋和临时的级联if-else语句查询执行的可能排列(所有参数,只有第一个,只有第二个,第一个和第二个......):
MyClassList = (List<MyClass>) query.execute(user, startDate, endDate);
Run Code Online (Sandbox Code Playgroud)
我确信这是一项共同的任务,而其他人则以更加通用和有效的方式进行.
有什么建议吗?
我找到了该方法的解决方案 query.executeWithArray
这样我就可以动态地构建过滤器和参数声明,将实际对象加载到一个对象数组中,然后传递给上面提到的方法.
另一个重要的方法是,executeWithMap您可以使用它来按名称绑定参数.
| 归档时间: |
|
| 查看次数: |
6557 次 |
| 最近记录: |