Mule Query Language - упорядочить по пунктам - PullRequest
1 голос
/ 24 февраля 2012

Ищем язык запросов для работы с Java-объектами. Найден MQL (Mule Query Language). Это в бета-версии, я не нашел много документации. попробовал пару вещей, например, где предложение и выберите предложение. Но пункт заказа не работает.

List users = new ArrayList(); 
users.add(new User("Dan", "Dan.Diephouse@gmail.com",2,13000 , address)); 
address = new Address("International pkway","Atlatna","GA","USA"); 
users.add(new User("Joe", "Joe.Sales@yahoo.com", 1,14000, address)); 
users.add(new User("John", "John@yahoo.com", 1,16000, address)); 
users.add(new User("Scott", "scott@yahoo.com", 1,15000, address)); 
users.add(new User("Andy", "andy@abc.com", 1,7000, address)); 

Query query = new QueryBuilder() 
.as("p") 
.orderby("income") 
// .max(3) 
.where(eq(property("companyId"), 1)) 
.select(newObject() 
.set("name", "name") 
.set("income", "income") 
.set("email", "email")).build(); 

Collection result1 = query.execute(users); 

Пожалуйста, дайте мне знать, если кому-то повезет, играя с MQL, или предложите любую другую хорошую среду для запросов к объектам Java.


Another error – when the result set is not hashmap.

Exception in thread “main” java.lang.ClassCastException: com.mql.test.User cannot be cast to java.util.Map
at com.mulesoft.mql.impl.OrderByComparator.compare(OrderByComparator.java:11)
at java.util.Arrays.mergeSort(Arrays.java:1270)
at java.util.Arrays.sort(Arrays.java:1210)
at java.util.Collections.sort(Collections.java:159)
at com.mulesoft.mql.Query.order(Query.java:214)
at com.mulesoft.mql.Query.execute(Query.java:189)

    List persons = getPersons();

    Query query = new QueryBuilder()
    //  .where(and(eq(property(“division”), “Sales”),
    // eq(property(“firstName”), “Joe”)))
    .orderby(“income”)
    .max(3)
    .build();

Ответы [ 2 ]

0 голосов
/ 25 февраля 2012
  public int compare(Object o1, Object o2) {

        Object r1 = null, r2 = null;
        if(o1 instanceof Map && o2 instanceof Map) {
            Map<String,Object> o1Map = (Map<String,Object>) o1;
            Map<String,Object> o2Map = (Map<String,Object>)  o2;
             r1 = MVEL.executeExpression(expression,o1Map.get(queryBuilder.getAs()), o1Map);
             r2 = MVEL.executeExpression(expression, o2Map.get(queryBuilder.getAs()), o2Map);

        }else {
             r1 = MVEL.executeExpression(expression,  o1);
             r2 = MVEL.executeExpression(expression,  o2);

        }


        if (r1 instanceof Comparable && r2 instanceof Comparable) {
            return ((Comparable)r1).compareTo(r2);
        }

        if (r1 == null && r2 == null) {
            return 0;
        }

        if (r1 == null) {
            return -1;
        }

        if (r2 == null) {
            return 1;
        }

        return r1.toString().compareTo(r2.toString());
    }
0 голосов
/ 25 февраля 2012

Я посмотрел исходный код mql.У нас есть ошибка (опечатка) в классе OrderByComparator.

Object r1 = MVEL.executeExpression(expression, o1.get(queryBuilder.getAs()), o1);
Object r2 = MVEL.executeExpression(expression, o1.get(queryBuilder.getAs()), **o1)**;

должно быть:

Object r2 = MVEL.executeExpression(expression, o1.get(queryBuilder.getAs()), **o2);**
...