0

我是 MyBatis 的新手。谁能帮我解决这个问题。谢谢你。

我创建了一个名为“CodeValue”的表,其中包含“Code”、“Value”等列。我正在使用 mybatis selectMap() 方法从表中检索“Code”、“Value”列,该方法应返回带有键“Code”的 HashMap和价值“价值”如下

<select id="getResults" parameterType="java.util.Map" resultType="java.util.HashMap">
   select "Code","Value" from "CodeValue"
</select

 Map<String, String> CodeValueMap = getSqlSession().selectMap("getResults", null, "Code");

我将 POJO 定义如下

class CodeValue
{
  private String code;
  private String value;
  ....
  ...

  public String getCode() {
    return code;
  }

  public void setCode(String code) {
    this.code = code;
  }

  public String getValue() {
    return value;
  }

  public void setValue(String value) {
    this.value = value;
  }

  public String getKey() {
    return "code";
  }


  public String getDefaultSortColumn() {
    return code;
  }


  public String getUniqueKey() {
    return code;
  }
  ...
  ...
  ...

}

当我运行代码时,我得到如下结果

{CODE1={Value=A, Code=CODE1}, CODE2={Value=B, Code=CODE2}, CODE3={Value=C, Code=CODE3}, CODE4={Value=D, Code=CODE4}, CODE5={Value=E, Code=CODE5}, CODE6={Value=F, Code=CODE6}, CODE7={Value=G, Code=CODE7}}

但我想要的结果如下

{{CODE1=A},{CODE2=B},{CODE3=C},{CODE4=D},{CODE5=E},{CODE6=F},{CODE7=G}

谢谢你

4

1 回答 1

1

MyBatis 可能无法Map直接以你需要的形式返回。
但是转换结果并不难。

如果调用selectList()[1],MyBatis 可能会返回一个Maps 列表。

[{Value=A, Code=CODE1},
{Value=B, Code=CODE2},
{Value=C, Code=CODE3}]

下面是执行转换的示例代码。

List<Map<String, Object>> maps = sqlSession.selectList("getResults");
Map<String, String> map = maps.stream()
  .collect(Collectors.toMap(
    m -> (String) m.get("CODE"),
    m -> (String) m.get("VALUE")));

assertEquals("A", map.get("Code1"));
assertEquals("B", map.get("Code2"));
assertEquals("C", map.get("Code3"));

[1]selectMap()是一种非常具体的用法。

于 2021-08-09T20:26:20.540 回答