mybatis中的hashmap结果图

时间:2014-10-14 15:26:40

标签: java map hashmap mybatis

我有一个像这样的java类:

public class Team {
private HashMap<String, User> users;
private int id_team;
private String nome;
...
}

像这样的xml文件:

<resultMap id="userJoinTeamResultMap" type="Team">
    <id column="id_team" property="id_team" />
    <result column="nome" property="nome" />
    <collection property="users" javaType="HashMap" >
        <id column="id_user" property="id" />
        <result column="nome_user" property="nome" />
        <result column="cognome" property="cognome" />
        <result column="email" property="email" />
    </collection>
</resultMap>

一个选择,它做了它必须做的事情。 但是当我尝试在我的hashmap中获取值时:

ArrayList<Team> listaTeam = getBlmTeam().getUserTeamFromCorso(jsonInput.getInt("id_corso"));
Iterator<Team> it = listaTeam.iterator();
while(it.hasNext()){
        Team t = it.next();
        Collection<String> set = t.getUsers().keySet();
        Iterator it2 = set.iterator();
        while(it2.hasNext()){
             Object k = it2.next();
             System.out.println("key:"+k.toString()+"  value:"+t.getUsers().get(k));
}}

我的价值观是:

key:id     value:103
key:email  value:HSXB736GB
key:id     value:105
key:email  value:ZQFD4U
..

什么键是??? 在第一个团队中,有两个用户使用密钥102和103.但是每个用户都使用密钥“id”,因此,它们会被覆盖。

2 个答案:

答案 0 :(得分:2)

您未正确使用HashMap。你不想映射

id -> 103
email -> HSXB736GB

等。正如您所发现的那样,如果您这样做,那么您只能拥有一个用户,因为密钥必须是唯一的,因此当您添加新用户时,id将被覆盖。

您要做的是将ID映射到用户对象

103 -> [user instance with ID 103]
105 -> [user instance with ID 105]

这意味着您需要HashMap<String,Utente>而不是HashMap<Integer,Utente>。然后你可以做像

这样的事情
Utente someUser = ...
map.put(someUser.getId(), someUser);

以后您可以使用

从地图中检索用户
Utente someUser = map.get(id);

只要你知道身份证。

答案 1 :(得分:-1)

我决定使用

private Arraylist<User> users;

<collection property="users" javaType="ArrayList">