我知道有兩種方式來處理這個問題。
選項1:使用Mapper類並指定List返回的類型。
定義映射接口:
public interface TeamMapper {
CopyOnWriteArrayList<Team> getTeamsByGameID();
}
你的XML映射文件保持不變。代碼來執行所述查詢變更:
TeamMapper m = session.getMapper(TeamMapper.class);
List<Team> lt = m.getTeamsByGameID();
System.out.println(lt.getClass());
//=> prints out "class java.util.concurrent.CopyOnWriteArrayList"
選項2:創建ResultHandler並傳遞到session.select()
方法。
這裏使用ResultHandler接口。該界面要求您覆蓋一個方法,即handleResult
,在查詢過程中會給出每個從數據庫返回的結果。
在你的情況,你的ResultHandler看起來是這樣的:
public class TeamResultHandler implements ResultHandler {
private List<Team> teams = new CopyOnWriteArrayList<Team>();
@Override
public void handleResult(ResultContext rc) {
countries.add((Team) rc.getResultObject());
}
// provide a getter so you can retrieve it when finished
public List<Team> getTeamList() {
return teams;
}
}
而不是使用selectList
如你在上面做,你現在會用session.select(String, ResultHandler)
,像這樣的:
TeamResultHandler rh = new TeamResultHandler();
session.select("getTeamsByGameID", rh);
List<Team> lt = rh.getTeamList();
return lt;
這解決方案比解決方案更冗長(需要額外的類和三行代碼,而不是2),但它只創建一個List,而不是兩個,因此您必須決定哪個最適合您的需求。
此外,ResultHandlers可用於其他事情 - 確保結果按特定方式排序或篩選或其他內容,以防萬一需要。
真的很感激你花時間把這些例子放在一起。我以前見過結果處理程序,但不知道如何使用它。我偶爾無法在MyBatis文檔中找到所需的所有東西。 – 2012-07-24 14:45:10
我發現學習MyBatis的最好方法是做它的各種功能的小例子,然後在面對「我怎麼......?」時保持這些代碼片段的方便。的問題。 MyBatis用戶指南概述了可能性,但並不總是顯示如何使用每個功能。爲此我創建了一組「MyBatis Koans」。如果你不想做koans,你可以看看koan的內容,然後跳到完成的koans,看看如何使用某些功能。鏈接:https://github.com/midpeter444/mybatis-koans – quux00 2012-07-24 22:22:29