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

使用MyBatis映射java.util.Map字段,java,map,mybatis,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将数据映射到条形图?下面

我想用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>

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

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

因此,因为HashMap实现了映射,所以HashMap是一个映射

无论您是否使用泛型键,其末尾的值也会随之改变


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

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

因此,因为HashMap实现了映射,所以HashMap是一个映射

无论您是否使用泛型键,其末尾的值也会随之改变


我对此做了一些研究,并询问了MyBatis谷歌集团,因为我对自己如何做到这一点很感兴趣

目前,这似乎是不可能的。如果希望使用映射在Foo对象中创建一个列表,则可以轻松地使其工作

我尝试使用返回地图,但它不明白我要求它做什么

我现在知道的唯一方法是通过两个查询/映射自己管理它——一个是用Foo的所有字段(而不是条集合)填充Foo。然后使用如下所列的查询映射,将映射中的所有条向后拉,并将其插入到您的Foo对象中:

@Select("SELECT bar_id, bar_name FROM bar WHERE foo_id = #{id}")
@MapKey("bar_name")
Map<String, Bar> getBarsById(int id);
这将返回一个映射,每个条对应一个条目,其中条目的键是bar_name列的值


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

我已经对此做了一些研究,并询问了MyBatis Google group,因为我自己对如何做到这一点很感兴趣

目前,这似乎是不可能的。如果希望使用映射在Foo对象中创建一个列表,则可以轻松地使其工作

我尝试使用返回地图,但它不明白我要求它做什么

我现在知道的唯一方法是通过两个查询/映射自己管理它——一个是用Foo的所有字段(而不是条集合)填充Foo。然后使用如下所列的查询映射,将映射中的所有条向后拉,并将其插入到您的Foo对象中:

@Select("SELECT bar_id, bar_name FROM bar WHERE foo_id = #{id}")
@MapKey("bar_name")
Map<String, Bar> getBarsById(int id);
这将返回一个映射,每个条对应一个条目,其中条目的键是bar_name列的值


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

fooResultMap关联中的resultMap是否应该指向barResultMap,而不是priceMapResultMap?我不明白价格在你的问题中起什么作用。你想用很多条来填充Foo作为一个地图,而不是一个列表,对吗?嗨,谢谢,这是错别字,我更正了。你说得对,我想用很多条来填充Foo,作为一个映射,而不是一个列表,但无法正确运行。好的,接下来的问题是-1数据库中Foo和条之间是否存在1:many关系?一福可以有很多酒吧吗?2在映射的SQL中,您是否在一个查询中将这两个属性都向后拉?3当您说它不起作用,因为它将“始终新建映射”设置为“字段”时,您的意思是它正在覆盖您在Foo构造函数中创建的条形图吗?它是否正在返回映射或当前返回的是什么?1是的,它是1:多个关系-Foo可以有N个..*条形图。2是的,我在一个查询中选择了所有内容。3据我所知,如果我使用MyBatis,fooResultMap关联中的resultMap是否应该指向barResultMap,而不是priceMapResultMap?我不明白价格在你的问题中起什么作用。你想用很多条来填充Foo作为一个地图,而不是一个列表,对吗?嗨,谢谢,这是错别字,我更正了。你说得对,我想用很多条来填充Foo,作为一个映射,而不是一个列表,但无法正确运行。好的,接下来的问题是-1数据库中Foo和条之间是否存在1:many关系?一福可以有很多酒吧吗?2在映射的SQL中,您是否在一个查询中将这两个属性都向后拉?3当您说它不起作用,因为它将“始终新建映射”设置为“字段”时,您的意思是它正在覆盖您在Foo构造函数中创建的条形图吗?它是否正在返回映射或当前返回的是什么?1是的,它是1:多个关系-Foo可以有N个..*条形图。2是的,我在一个查询中选择了所有内容。据我所知,如果我使用MyBatis,谢谢你的研究。我也做了自己的,但没有找到更好的。我最终用java代码构建了地图。如果你能将链接发布到功能请求,那就太好了。也许它可以帮助以后的人。谢谢你的研究。我也做了自己的,但没有找到更好的。我最终用java代码构建了地图。如果你能将链接发布到功能请求,那就太好了。也许它能帮助以后的人。