![](/img/trans.png)
[英]Return HashMap in mybatis and use it as ModelAttribute in spring MVC
[英]MyBatis return hashmap real type
這是Dao代碼
@Select("select * from my_table order by id limit 1")
Map<String, String> selectFirst();
如您所見,我將返回類型指定為Map<String, String>
。 現在出現了困惑:
Map<String, String> firstRow = myDao.selectFirst();
Object o = firstRow.get("id");
System.out.println(o.getClass()); // class java.lang.Integer
// java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
int id = Integer.parseInt(firstRow.get("id"));
所以我從Map<String, String>
得到一個Integer
,怎么會發生這種情況?
如果Dao方法的實際返回類型是Map<String, Object>
,如何將它分配給Map<String, String>
?
您的DAO返回untyped map
,這與Map<Object, Object>
。 可以將其分配給鍵入的地圖。 但是當你使用集合元素進行操作時,它會嘗試將元素轉換為指定的類型,並且如果無法進行強制轉換將拋出異常。
// untyped map
Map objectMap = new HashMap();
objectMap.put("key", new Integer(12));
// assign
Map<String, String> stringMap = objectMap;
// java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
System.out.print(stringMap.get("key"));
解決方案:使用Map<Object, Object>
類型或在這種情況下Map<String, Object>
就可以了。
// untyped map
Map objectMap = new HashMap();
objectMap.put("key", new Integer(12));
// assign
Map<String, Object> stringMap = objectMap;
System.out.print(stringMap.get("key"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.