2012-02-24 78 views
1

尋找查詢語言以使用java對象。找到MQL(Mule查詢語言)。 它在測試版中,我沒有找到很多文檔。嘗試過幾件事情,比如where子句和select子句。但訂單條款不起作用。Mule查詢語言 - 按條款排序

List users = new ArrayList(); 
users.add(new User("Dan", "[email protected]",2,13000 , address)); 
address = new Address("International pkway","Atlatna","GA","USA"); 
users.add(new User("Joe", "[email protected]", 1,14000, address)); 
users.add(new User("John", "[email protected]", 1,16000, address)); 
users.add(new User("Scott", "[email protected]", 1,15000, address)); 
users.add(new User("Andy", "[email protected]", 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(); 

回答

0
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

我看着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);**