使用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