Nemo

Nemo 关注TA

路漫漫其修远兮,吾将上下而求索。

Nemo

Nemo

关注TA

路漫漫其修远兮,吾将上下而求索。

  •  普罗旺斯
  • 负责帅就完事了
  • 写了1,496,113字

该文章投稿至Nemo社区   Java  板块 复制链接


【IDEA】 org.apache.ibatis.binding.BindingException【原因汇总】

发布于 2017/04/17 14:08 4,806浏览 0回复 1,433

项目在Eclipse中部署,一切正常。切换到Idea中后,启动OK,访问mapper报如下错误:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

推测有如下两种可能:

    1、接口已经被扫描到,但是代理对象没有找到,即使尝试注入,也是注入一个错误的对象(可能就是null)。
    2、接口已经被扫描到,代理对象找到了,也注入到接口上了,但是调用某个具体方法时,却无法使用(可能别的方法是正常的)。

当然,不好说是那种情况,毕竟报错的结果是一样的。开始排查:

1、mapper接口和mapper.xml是否在同一个包(package)下?名字是否一样(仅后缀不同)?[plain] view plain copy 比如,接口名是NameMapper.java;对应的xml就应该是NameMapper.xml  
2、mapper.xml的命名空间(namespace)是否跟mapper接口的包名一致?[plain] view plain copy 比如,你接口的包名是com.abc.dao,接口名是NameMapper.java,那么你的mapper.xml的namespace应该是com.abc.dao.NameMapper  
3、接口的方法名,与xml中的一条sql标签的id一致[html] view plain copy 比如,接口的方法List findAll();那么,对应的xml里面一定有一条是"findAll" resultMap="**">****select>  
4、如果接口中的返回值List集合(不知道其他集合也是),那么xml里面的配置,尽量用resultMap(保证resultMap配置正确),不要用resultType
5、最后,如果你的项目是maven项目,请你在编译后,到接口所在目录看一看,很有可能是没有生产对应的xml文件,因为maven默认是不编译的,因此,你需要在你的pom.xml的build>里面,加这么一段:                src/main/java                        **/*.xml                    true          最后发现其实Eclise中能正常使用,也就意味着前面四中排查基本是失效的...只能是最后一种。打开target目录,发现确实mapper的文件都没有生成。所以排查5基本成立...
本文标签
 {{tag}}
点了个评