java1.8,Map<String, String>接收mybatis查询返回来的数据时出错

使用java1.8,Map接收mybatis查询返回来的数据时,map中的value是Integer类型。
图片说明。这是怎么回事,求解。

那就用hashMap 接受吧

果使用select * 来查询的 那么实体类中的属性必须和数据表中对应的字段一模一样

如果使用select 字段名 as 别名来查询的 ,那么实体类中的属性必须和你取的别名对应

总之,你查询出来的字段和你实体类中对应的属性名必须一致

mybatis会根据返回的ResultSet根据schema类型生成结果,如果表中定义是整数那么返回的就是整数,表中定义的是Varchar,返回就是字符串,这里涉及到数据字段与java数据类型的映射关系,可以通过SQLMap进行配置。像你这种情况其实有两种方案可以解决或者避免。
1、使用Model而不是Map
定义一个Model容器而不是Map接收数据DO对象,这样代码更容易阅读,我们推荐使用这种方式。
2、使用Map
如果你确实不想创建那么多Do对象,可以使用Map,取数据的时候只需要使用强制类型转换就可以获取你要的数据

首先你的没有报错把,泛型的存在是为在编译的时候保证语法的错误,没有错误即可不必纠结断点看到的

这个应该和jdk版本没关系吧?hadPowerRule 接收的值,value值应该和数据库的字段类型一样,建议map的value 用Object承接,如下:
List>hadPowerRule=...

除非你查的这个表的列都是字符串类型的,Map的泛型才能用,不然就得换成或者不要泛型。

擦,尖括号被吞了,除非你查的这个表的列都是字符串类型的,Map的泛型才能用String,String,不然就得换成String,Object或者不要泛型。

我今天也遇到这个问题了, 问题的关键就在于你 数据库中存储的 map 相对于的value 是不是double类型,如果不是double类型,你map, Double d=get(key)也会报错。

虽然是18年的问题,但是我还是回答一下

Map map=new HashMap();
map.put("age",20);
Map<String,String> map2=map;

这是不报错的,JVM做了处理,这时候泛型不生效的。

mybatis中返回类型是map的时候他会根据数据库表字段类型自动载入,建议直接用map