使用MyBatis映射java.util.Map字段

时间:2012-07-15 22:27:17

标签: java map mybatis

我想使用MyBatis将数据映射到java.util.Map属性。我有这样简单的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>

2 个答案:

答案 0 :(得分:3)

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

目前,这似乎无法实现。如果您希望使用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团队建议在将来的版本中提出此功能的问题请求。

答案 1 :(得分:-11)

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

HashMap类实现Map。 地图是一个界面

因此因为HashMap实现了Map,HashMap是Map。

是否使用泛型键,值的结尾与否。

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