MyBatis 返回Map时,获取map.get("")获取的double类型报错

if91488 2014-11-06 11:12:14
myBatis返回
Map<String, Double>
取map中的数据时,
直接输出map有值,
{xxx=1200, cjcount=3, tdcjje=12000}

输出
map.get("xxx")
有值。
1200

但是如果我这样写
double i = map.get("xxx");

这时,编译器也认为
map.get("xxx")
为double类型。
但是问题来了
double i = map.get("xxx");
这句报错了
java.lang.ClassCastException: java.math.BigDecimal


为什么编译器提示map.get("xxx")为double类型,转换成double类型的时候就报错了呢?
解决不掉啊。
有木有大神帮忙解决一下啊,急死人了,在线等!!!
...全文
3349 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
浪里花 2014-11-08
  • 打赏
  • 举报
回复 1
引用 3 楼 if91488 的回复:
[quote=引用 2 楼 whos2002110 的回复:] 本来就不是Double类型, 编译器提示你是因为你Map指定了Value的泛型类型。 并不代表里面的值是Double类型。 建议你以后出来数据库数值返回到Java时都统一用Number接收,然后再得到你要的类型。 ((Number) map.get("xxx")).doubleValue(); 这样肯定行。 你的那个出来的实际类型是BigDecimal
我mybatis里面指定的java类型确实NUMERIC,但是我在myBatisConfig.xml里面是让NUMBEC类型的用DOUBLE接收,为什么返回的map会是BigDecimal,BIGDECIMAL类型的我注释掉了,并没有开放出来的啊?很郁闷,搞不明白,求大神指示一下?[/quote] BigDecimal 和 Double类继承自Number,你把myBatisConfig.xml配置文件贴出来看看,你的问题解决看2楼,就是2楼说的那样
whos2002110 2014-11-06
  • 打赏
  • 举报
回复
本来就不是Double类型, 编译器提示你是因为你Map指定了Value的泛型类型。 并不代表里面的值是Double类型。 建议你以后出来数据库数值返回到Java时都统一用Number接收,然后再得到你要的类型。 ((Number) map.get("xxx")).doubleValue(); 这样肯定行。 你的那个出来的实际类型是BigDecimal
tony4geek 2014-11-06
  • 打赏
  • 举报
回复
Double i = map.get("xxx");
whos2002110 2014-11-06
  • 打赏
  • 举报
回复
引用 3 楼 if91488 的回复:
[quote=引用 2 楼 whos2002110 的回复:] 本来就不是Double类型, 编译器提示你是因为你Map指定了Value的泛型类型。 并不代表里面的值是Double类型。 建议你以后出来数据库数值返回到Java时都统一用Number接收,然后再得到你要的类型。 ((Number) map.get("xxx")).doubleValue(); 这样肯定行。 你的那个出来的实际类型是BigDecimal
我mybatis里面指定的java类型确实NUMERIC,但是我在myBatisConfig.xml里面是让NUMBEC类型的用DOUBLE接收,为什么返回的map会是BigDecimal,BIGDECIMAL类型的我注释掉了,并没有开放出来的啊?很郁闷,搞不明白,求大神指示一下?[/quote] 不管数据库类型是numeric还是decimal,jdbc查询以后出来的都是java.math.BigDecimal,这是最原始的,也就我们通过sql查询到java端的原始类型。 我没怎么用过mybatis不清楚配置什么意思, 可能它不像hibernate那样查对象会直接转换类型吧。或者你问问懂mybatis的人
if91488 2014-11-06
  • 打赏
  • 举报
回复
引用 2 楼 whos2002110 的回复:
本来就不是Double类型, 编译器提示你是因为你Map指定了Value的泛型类型。 并不代表里面的值是Double类型。 建议你以后出来数据库数值返回到Java时都统一用Number接收,然后再得到你要的类型。 ((Number) map.get("xxx")).doubleValue(); 这样肯定行。 你的那个出来的实际类型是BigDecimal
我mybatis里面指定的java类型确实NUMERIC,但是我在myBatisConfig.xml里面是让NUMBEC类型的用DOUBLE接收,为什么返回的map会是BigDecimal,BIGDECIMAL类型的我注释掉了,并没有开放出来的啊?很郁闷,搞不明白,求大神指示一下?

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧