2016-10-24 65 views
0

我有取在MyBatis的結果轉換成地圖<整數,列表<Integer>>

id | dependencies 
----+-------------- 
    1 | {1,2,3,4,5} 
    2 | {2,3,4,5} 
    3 | {3,4,5} 
    4 | {4,5} 
    5 | {5} 
(5 rows) 

形式的結果的循環查詢我需要這個數據映射到

HashMap<Integer, List<Integer>>, 
where 
column "id" becomes KEY 
column "dependencies" becomes VALUE 
(dependencies= postgres array obtained after array_agg) 

Apparantly用,的resultSet映射爲

@Results(value={ 

      @Result(column="id", property="key", javaType=Integer.class), 
      @Result(column="dependencies", property="value", typeHandler=ArrayTypeHandler.class) 
    }) 


Im getting the results with return type as 
List<Map<Integer, List<Integer>>>, but they are not as expected 

有沒有一種方法,我可以將結果直接映射到地圖中?

+0

只是返回Map 在您的方法映射也許是正確的,發生了什麼?你可以添加更多的信息,因爲你得到的結果或類似的東西 – Pau

回答

0

你可以嘗試ResultHandler:

// declared as "final" to be visible in the anonymous class scope 
final Map<Integer, String> result = new HashMap<Integer, String>(); 

ResultHandler resultHandler = new ResultHandler() { 
    @Override 
    public void handleResult(ResultContext resultContext) { 
     Map object = (Map) resultContext.getResultObject(); 
      result.put((Integer)object.get("id"), (String)object.get("dependencies")); 
     } 
    }; 

session.select("myStatement", resultHandler); 
LOGGER.info(result); 

你也可以做到這一點通過映射接口:

// declare in mapper interface 
@ResultType(value=Map.class) 
@Results(value={ 
     @Result(column="id", property="id", javaType=Integer.class), 
     @Result(column="dependencies", property="dependencies", typeHandler=ArrayTypeHandler.class) 
}) 
void myStatement(ResultHandler resultHandler); 

// call 
session.getMapper(MyMapper.class).myStatement(resultHandler); 

您必須指定@ResultType如地圖, 或引用@ResultMap(「myResultMap」)其映射在XML中定義,然後刪除@Results。 否則一個BindingException拋出:MyStatement的需要在XML任一個@ResultMap註解,一個@ResultType 註釋,或與resultType屬性

方法,以便一個ResultHandler可以用作參數 。

相關問題