代码之家  ›  专栏  ›  技术社区  ›  JohnIdol

如何在多个参数上动态构建JDO查询

  •  4
  • JohnIdol  · 技术社区  · 16 年前

    可以很容易地使用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声明的strign:

    "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);
    

    我相信这是一项常见的任务,其他人正在以更普遍、更有效的方式完成它。

    1 回复  |  直到 15 年前
        1
  •  5
  •   ataylor    13 年前

    我在这个方法中找到了一个解决方案 query.executeWithArray

    通过这种方式,我可以动态构建过滤器和参数声明,将实际对象加载到一个对象数组中,然后将其传递给上述方法。

    另一个重要的方法是 executeWithMap 您可以使用它按名称绑定参数。