我有一个表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排序?
答案 0 :(得分:2)
我认为您的问题可能与使用的Java类型有关。需要查询列表,而不是Map,因为Java HashMap(我认为这是查询将返回的内容)不支持排序。 请参阅应返回所需内容的SqlMapDaoTemplate#queryForList()方法。
答案 1 :(得分:1)
我认为您的问题是由于Map不是有序结构这一事实:地图的键按其哈希码的顺序存储。您需要做的是将地图的键放入向量中然后对它们进行排序(或者让SQL为它们排序,然后将它们插入到向量中)。然后你可以迭代向量并通过键访问地图。
答案 2 :(得分:1)
java.util.LinkedHashMap
将确保按照添加项目的顺序进行迭代,尝试使用该类而不是仅保留迭代顺序的普通HashMap
。