首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MyBatis SelectList输出CopyOnWriteArrayList

MyBatis SelectList输出CopyOnWriteArrayList
EN

Stack Overflow用户
提问于 2012-07-20 04:07:53
回答 1查看 3.1K关注 0票数 3

请耐心面对新手的问题,因为我正在尝试同时学习MyBatis和java。我有一个需要使用threadsafe变量的应用程序。基于一些研究和我对如何使用该应用程序的想法,我最终选择了CopyOnWriteArrayList over a Vector.

当我从mybatis sql会话调用selectList时,有没有办法告诉它创建一个CopyOnWriteArrayList作为它的返回值,而不是一个ArrayList?诚然,我的配置代码是两行而不是一行,但我的内心告诉我一定有更好的方法,而且/或者我不是第一个遇到这种情况的人。

代码语言:javascript
复制
List<Team> teams = session.selectList("getTeamsByGameID", gameID);
List<Team> arrayListReturn = new CopyOnWriteArrayList<Team>(teams);
return arrayListReturn;

提前谢谢你,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-22 05:34:22

我知道有两种方法可以解决这个问题。

选项1Mapper:使用类并指定要返回的列表的类型。

定义Mapper接口:

代码语言:javascript
复制
public interface TeamMapper {
  CopyOnWriteArrayList<Team> getTeamsByGameID();
}

您的映射器xml文件保持不变。执行查询的代码更改为:

代码语言:javascript
复制
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将如下所示:

代码语言:javascript
复制
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;
  }
}

您现在可以使用session.select(String, ResultHandler),而不是像上面那样使用selectList

代码语言:javascript
复制
TeamResultHandler rh = new TeamResultHandler();
session.select("getTeamsByGameID", rh);
List<Team> lt = rh.getTeamList();
return lt;

这个解决方案比您的解决方案更冗长(需要一个额外的类和查询代码中的三行,而不是两行),但它只创建一个列表,而不是两个,因此您必须决定哪一个最适合您的需求。

此外,ResultHandlers对于其他事情也很有用--确保以某种方式对结果进行排序,或者对结果进行过滤,以防您需要这样做。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11568478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档