Mybatis возвращает HashMap

avatar
rajani chowdhary
9 августа 2021 в 05:19
63
1
0

Я новичок в MyBatis. Может ли кто-нибудь помочь мне решить эту проблему. Спасибо.

Я создал таблицу с именем «CodeValue» с такими столбцами, как «Код», «Значение» и т. д. Я извлекаю столбцы «Код», «Значение» из таблицы с помощью метода mybatis selectMap(), который должен возвращать 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}

Спасибо

Источник

Ответы (1)

avatar
ave
9 августа 2021 в 20:26
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() — метод для очень специфического использования.

rajani chowdhary
10 августа 2021 в 05:01
0

Большое спасибо, пр. Это хорошо работает для меня. Я действительно ценю твою помощь. Благодарю вас.