2

我想java.util.Map用 MyBatis 将数据映射到属性。我有这样的简单 POJO:

public class Bar {
     ...fields
}

public class Foo {
    private Map<String, Bar> bars;

   public Foo() {
        bars = new HashMap<String, Bar>();
   }

   ...

}

如何使用 MyBatis 将数据映射到条形图?下面的示例不起作用,因为它总是将新地图设置为字段。

<resultMap id="fooResultMap" type="Foo">
   ...attributes
    <association property="bars" resultMap="barResultMap" />
</resultMap>

<resultMap id="barResultMap" type="map">
        <result property="key" column="bar_key" />
  <association property="value" javaType="Bar">
    ...attributes
  </association>
</resultMap>
4

2 回答 2

3

我已经对此进行了一些研究,并在 MyBatis Google group 上询问过,因为我对自己如何做这件事很感兴趣。

目前,这似乎是不可能的。List<Bar>如果您想在 Foo 对象中使用<collection>映射,您可以轻松地使其工作。

我尝试使用<collection>返回地图,但它不明白我要它做什么。

我现在知道的唯一方法是使用两个查询/映射自己管理它 - 一个用它的所有字段填充 Foo,而不是它的 Bars 集合。然后像下面列出的查询映射来拉回 Map 中的所有 Bars 并将其插入到您的 Foo 对象中:

@Select("SELECT bar_id, bar_name FROM bar WHERE foo_id = #{id}")
@MapKey("bar_name")
Map<String, Bar> getBarsById(int id);

这将返回一个 Map,其中每个栏都有一个条目,其中条目的键是“bar_name”列的值。

MyBatis 团队建议在未来的版本中为此功能提出问题请求。

于 2012-07-18T13:02:35.873 回答
-11

关于 MyBatis 和 HashMap ,实际上就是这样。

HashMap 类实现 Map 。地图是一个接口

因此,因为 HashMap 实现了 Map ,所以 HashMap 是一个 Map。

无论您是否使用泛型键,值都在它的末尾。

http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html

于 2012-07-15T22:42:22.797 回答