最近同事在开发中遇到一个问题,从数据库中查找的使用order by的数据传递到前台后变成无序的。
使用的是mysql + mybatis
一开始以为是数据order by没有生效,复制sql到客户端查看发现是正确的。
后来发现他的映射类型(resultType)是map,外层使用的是HashMap来接受数据,而HahsMap是不能保证顺序的(插入顺序和读取顺序不一致)。
由于大部分代码已经完成,在不大规模修改代码的情况下,选择使用可以保证排序的LinkedHashMap。
下面写几个小demo,对比一下这两个Map的差别:
HashMap:
Map<String, String> mp = new HashMap<String, String>();
for (int i=0; i<10; i++) {
mp.put("key" + i, "value" + i);
}
for (Map.Entry<String, String> entry : mp.entrySet()) {
System.out.println(entry.getKey() + "-" + entry.getValue());
}
结果,
key1-value1
key2-value2
key0-value0
key5-value5
key6-value6
key3-value3
key4-value4
key9-value9
key7-value7
key8-value8
LinkedHashMap:
Map<String, String> mp = new LinkedHashMap<String, String>();
for (int i=0; i<10; i++) {
mp.put("key" + i, "value" + i);
}
for (Map.Entry<String, String> entry : mp.entrySet()) {
System.out.println(entry.getKey() + "-" + entry.getValue());
}
结果,
key0-value0
key1-value1
key2-value2
key3-value3
key4-value4
key5-value5
key6-value6
key7-value7
key8-value8
key9-value9
从结果可以很明显看出,两者的区别。
关于linkedHashMap,这篇文章说的很详细,我就不再赘述了
https://www.cnblogs.com/xiaoxi/p/6170590.html