これを処理する2つの方法を知っています。
オプション 1 : Mapper クラスを使用し、そこに返される List のタイプを指定します。
Mapper インターフェースを定義します。
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
このインターフェイスでは、クエリの進行中にデータベースから返される各結果が与えられる1 つのメソッドをオーバーライドする必要があります。
あなたの場合、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 行ではなく 3 行が必要です) が、2 つではなく 1 つのリストしか作成しないため、ニーズに最も適したものを決定する必要があります。
さらに、ResultHandlers は、必要に応じて、結果を特定の方法で並べ替えたり、フィルター処理したり、その他の方法で確実に並べ替えたりするなど、その他の用途にも役立ちます。