java - MyBatis 返回 hashmap 真实类型

标签 java orm mybatis

这是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"));

所以我得到一个 Integer来自Map<String, String> ,怎么会发生这种事?
如果Dao方法的真实返回类型是Map<String, Object> ,它怎么可能被分配给 Map<String, String>

最佳答案

您的 DAO 返回 untyped map ,与 Map<Object, Object> 相同。可以将其分配给类型化的 map 。但是当你操作集合元素时,它会尝试将元素强制转换为指定类型,如果无法强制转换,则会抛出异常。

        // 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"));

关于java - MyBatis 返回 hashmap 真实类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37451044/

相关文章:

java - jackson jsonSchema : How to set type object for property (JsonRawValue)

java - 使用 ActiveJDBC 加载大型数据集

python - Django 不区分大小写 "distinct"查询

Java帮助: why can't I access the static methods declared in a class outside the current main method file

java - 当我们有特定文本到模式时,正则表达式 Java

javascript - sailsjs 其中多对多关系包含

java - 使用 ebean 或 hibernate 将值插入到一对一映射注释中

ibatis - mybatis 使用动态 sql 按多个字段排序

java - MyBatis 一次执行多条sql语句,这可能吗?

java - 在 MyBatis Java 中记录最终的 MySQL 查询,以便之后在不同的服务器上手动执行它