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

标签 java dictionary 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 将数据映射到条形图?下面的示例不起作用,因为它始终将新 map 设置为字段。

<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 Google 小组上进行了询问,因为我对自己如何做这件事很感兴趣。

目前,这似乎是不可能的。如果你想要一个List<Bar>,你可以很容易地让它工作。在 Foo 对象中使用 <collection>映射。

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

我现在知道的唯一方法是使用两个查询/映射自行管理它 - 一个是用它的所有字段填充 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);

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

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

关于java - 使用 MyBatis 映射 java.util.Map 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11496161/

相关文章:

java - 有没有办法在 Eclipse 中抑制 "The type (...) collides with a package"警告?

java - 将 JLabel 与 JCheckBox 的文本对齐

java - Redis SCAN 返回无效游标

java - JemmmyFX 处于事件模式

python - 在python中将元组转换为字典

python - 检查给定键是否包含在多个字典中的任何一个中

java - MyBatis中foreach如何遍历HashMap?

python - 我如何在 Python 的字典中请求子键的键?

java - MySql 和 MyBatis 日期时间小数秒

java - 带有Mybatis-Generator-Maven-Plugin的Maven项目,嵌套模块依赖问题