mybatis异常:Could not find result map Java.util.Map 问题分析及解决

使用mybatis时,自己或者同事踩到的坑给大家分享下,有其他问题分享的同学欢迎交流~

现象:编译未出现异常,调用相关服务时候,出现 Could not find result map Java.util.Map,不管调用mybatis update,delete,insert,get方法都是抛出类似的异常。

分析:在这个基础上,Mapper.xml文件一般都是增量,不断新增功能,如果原先是好的,你应该意识到自己后面新增的地方出问题啦~,那好,如何定位呢?

解决:对于初次出现问题的同学,你可以把新增的代码进行逐一注释运行(当然可以使用对半查找,但是如果出错的地方多的话,不建议),这种办法虽然笨,但是对于新手(对mybatis的源码了解不够的情况下)而言是一种比较实在的方法。碰多了老司机,基本上就知道怎么去查找这个问题。总结几种情况:

1、错误写法 <select id="getXXX" resultMap="java.util.Map" > 原本的意思是想返回一个map,个人不建议返回map,建议返回实体bean,resultMap对应的是Mapper.xml 文件的 <resultMap id="" /> 标签,对,没错,就是这个,另外如果想要返回map,应该使用resultType

正确写法: <select id="getXXX" resultType="java.util.Map" >

2、使用@注解和Mapper.xml一起使用的时候,为了便于扩展,鄙人使用了ExtMapper.xml来继承Mapper.xml实现的,这样有利于新增/删除字段的时候,不需要改动ExtMapper.xml。 实际项目中又想使用@update,@Select这种注解型实现,书写方便,但是,ExtMapper.xml又比较灵活组织数据,此时调用的时候@ResultMap(id=" BaseResultMap") 此时也会有异常 Could not find result map Java.util.Map,一般解决方案是id带上域名,如@ResultMap(id=" com.xxx.xxx.BaseResultMap")。当然,官方本身还是建议使用全XML形式,主要出现这个问题的原因可能是贪图注解型的简单书写。

3、mybatis相关xml文件未被加载进spring 容器也会出现类似错误,可以检查下自己Ide环境下的配置,比如intelij idea一般指定的类路径和我们所想的并不一样,比如

<property name="mapperLocations" value="classpath*:mybatis/**/*Mapper.xml"/>

一般情况是不需要在classpath后面加上*的,不加上*表示只在指定的路径下去加载文件,所以在本地上运行时会发现加载不进去xml文件,可以考虑在classpath后面添加*解决。

欢迎交流指正~

 

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值