如何在iBatis中获得排序结果?

时间:2010-06-26 06:41:10

标签: java sorting hashmap ibatis

我有一个表mgr_employee,其中包含2列managerName,teamEmployee。
虽然我在sql中进行排序,但我在java中得到未排序的resultMap。
如何获得有序映射?为什么iBatis会混淆resultMap?

<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>

调用上面的sql的Java代码:

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

由于sql中的“order by”子句,mCountMap未按预期排序。 任何意见/建议,如何获得resultMap排序?

3 个答案:

答案 0 :(得分:2)

我认为您的问题可能与使用的Java类型有关。需要查询列表,而不是Map,因为Java HashMap(我认为这是查询将返回的内容)不支持排序。 请参阅应返回所需内容的SqlMapDaoTemplate#queryForList()方法。

答案 1 :(得分:1)

我认为您的问题是由于Map不是有序结构这一事实:地图的键按其哈希码的顺序存储。您需要做的是将地图的键放入向量中然后对它们进行排序(或者让SQL为它们排序,然后将它们插入到向量中)。然后你可以迭代向量并通过键访问地图。

答案 2 :(得分:1)

java.util.LinkedHashMap将确保按照添加项目的顺序进行迭代,尝试使用该类而不是仅保留迭代顺序的普通HashMap