Как получить отсортированный результат в iBatis? - PullRequest
3 голосов
/ 26 июня 2010

У меня есть таблица mgr_employee с 2 столбцами managerName, teamEmployee.
Хотя я делаю сортировку в sql, я получаю несортированный resultMap в java.
Как получить отсортированную карту?Почему iBatis смешивает карту результатов?

<resultMap id="s_filter_defaults_ResultMap" class="java.util.HashMap">
  <result property="key" column="managerName"/>
  <result property="value" column="count"/>
</resultMap>

<select id="mCount" parameterClass="java.util.HashMap" resultMap="mcount_ResultMap">
    <![CDATA[
     select managerName, count(teamEmployee) AS count
      from mgr_employee
      group by managerName 
      order by managerName;
    ]]>
</select>

Java-код для вызова вышеуказанного sql:

Map<String,Long> mCountMap = getSqlMapClientTemplate().queryForMap("mCount", "", "key", "value");

mCountMap не отсортирован, как ожидалось, из-за предложения order by в sql.Любые комментарии / предложения, как получить результатКарта отсортирована?

Ответы [ 3 ]

2 голосов
/ 26 июня 2010

Я думаю, что ваша проблема может быть связана с используемыми типами Java.Необходимость запрашивать список , а не Map, потому что Java HashMap (я полагаю, это то, что запрос будет возвращать) не поддерживает сортировку.Смотрите SqlMapDaoTemplate # queryForList () методы, которые должны возвращать то, что вам нужно.

1 голос
/ 26 июня 2010

A java.util.LinkedHashMap обеспечит итерацию в порядке добавления элементов, попробуйте использовать этот класс вместо простого HashMap, который не поддерживает порядок итерации.

1 голос
/ 26 июня 2010

Я думаю, что ваша проблема связана с тем, что Карта не является упорядоченной структурой: ключи карты хранятся в порядке их хэш-кодов. Вам нужно было бы поместить ключи карты в вектор, а затем отсортировать их (или сделать так, чтобы SQL отсортировал их для вас, а затем вставить их в вектор). Затем вы можете перебрать вектор и получить доступ к карте по ключам.

...