您的位置:首页 > 运维架构 > Apache

出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)的解决方法

2017-01-25 00:54 1341 查看
这篇博客记录并分享我思考这个问题的过程,所以对急于寻找解决问题方法的man来说略显冗余繁琐,写的一般,可以直接跳到最后面的总结。

         我的报错信息是:

               org.springframework.web.util.NestedServletException: Request processing failed;

    nested exception is org.apache.ibatis.binding.BindingException: Invalid bound    

    statement (not found): com.MrCBBS.mapper.UserMapper.selectOneByUAccount

今天,“误删”了Intellij上的项目,准确来说,是“delete Module”了项目,重新部署后遇到好多问题,好不容易项目跑起来了,却发现原来的项目出现了没出现过的bug,一直提示我Mybatis写的mapper里面一个方法找不到,可是我查看代码是那个方法就好好的写在那里,对比id属性与接口的方法名也没有错,而且我之前这部分功能是测试过的,所以在确认了不是代码的问题之后,我确信了是项目部署的问题。

我以前在myeclispse上开发,这个代码也是从myeclipse移过来的,潜意识里觉得是编译的问题,所以找了项目里面classes文件并打开这个mapper的xml文件,“惊喜”地发现那个mapper里面确实没有这个方法,这时候想起idea对classpath的规定,它的编译结果并不是放在src下面的classes里面,而是在项目目录等级的.out目录里面,要使它的编译结果放在src下要从新编译;故转而去看.out目录,发现也是一样的mapper,找不到那个方法;进去Intellij的设置里面把编译结果的路径设置在classes(因为习惯而已),重新Build一下项目,结果去看那个mapper还是找不到那个方法,而那个方法却好好的写在我的代码里!

是在没办法,于是我重新从头查看项目部署的配置,最后发现在Module里面的Module SDK选择的是“Project SDK(1.8)”,问题就出在这,我把它改为自己的jdk,点击apply,重启服务器,运行测试,这下就成功重新编译了src目录里面的xml文件。

写了那么多,还是总结一下:

(1)当编译器报MyBatis的mapper里面某个方法找不到时:

1. 仔细对照方法名有没有误,标签里面的属性parameterType、 resultType啊等

等有没有写错,能不能与方法签名对上号;

2. 确认部署没问题之后还是有问题,可以看看是否是xml没有被重新编译,导致项

目找不到新写的方法,转(2);

(2)发现项目没有被编译时:

1. 如果是新导入的项目,查看一下项目的输出路径与之前的是否一致,是否需要

修改输出路径,eclipse系列一般输出到src下(Java文件输出到src/classes下面)

而Intellij输出到.out路径,如果前后有编译器的不同或开发者习惯不同,应留意一

下;

2. 排除输出路径的问题,查看下JDK的版本,Inteallij里面是修改项目的Module

SDK,把它改为自己本地的JDK,路径:Project Structure --> Modules -->

Module SDK 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Intellij MyBatis
相关文章推荐