当前位置: 代码迷 >> 综合 >> Invalid bound statement (not found): com.xxx.dao.xxxDao.selectByxx错误
  详细解决方案

Invalid bound statement (not found): com.xxx.dao.xxxDao.selectByxx错误

热度:73   发布时间:2023-10-28 10:19:31.0

1.问题实质:dao层(又叫mapper接口)与mapper.xml文件映射关系配置错误

2.问题原因:  (1) dao层的方法和mapper.xml中的方法不一致(具体表现在方法名写错;方法参数路径写错,实体路径写错)

                     (2) mapper中的namespace、resultParameter 和对应的dao层entity层不一致

                       (3) 系统找不到mybatis的xml文件

3.解决思路:如果是因为粗心大意漏写多写的话就自己仔细检查检查,如果是问题3的话则需要检查一下xml文件是否被扫描到

4.解决步骤:

                      1)检查xml文件所在的package名称是否和interface对应的package名称一一对应

                      2)检查xml文件的namespace是否和xml文件的package名称一一对应

                      3)检查函数名称能否对应上

                      4)去掉xml文件中的中文注释

                      5)随意在xml文件中加一个空格或者空行然后保存

                    如果以上都无法解决问题,则检查Spring包扫描配置

                      1)打开spring-context.xml

                      2)找到class为org.mybatis.spring.SqlSessionFactoryBean 这个bean

                      3)找到name为mapperLocations的property

                      4)在list标签中添加一个value

                                     eg:

                                             <value>classpath:/info/mapper/**/*.xml</value>

然鹅我仔细检查了好久,灰常确认没有漏写、包扫描配置也没有问题,最终发现了一个大坑。

经过一番折腾发现问题出在Maven项目的resource文件夹上

需要把它右键->make directory as 变为resources root

       此问题产生原因是因为maven项目的约定配置文件必须放resources里,src目录下的xml文件默认不会编译到target。由于我是手动创建的resource文件夹并没有在系统中设置标记,才导致了该问题的发生,该问题是咱们没有遵循idea对classpath的规范。原来Maven 为我们提供了一致的项目目录配置(源文件夹、资源文件夹等),在自动构建项目时, Maven 会按照这个配置来执行操作(编译源文件、拷贝资源文件),手动把resource设置后,问题解决。

------------------------------------------------------------------------------------------------------------------------

今天又遇到这个问题了,以上办法都不能解决。。。看以下两幅图

看似两个一毛一样的路径,右键Show in Explorer

在本地磁盘上就不是一样的了。。。原来图一我是一层一层建的目录,图二是一次性建的目录(直接一次性输入com.xxx.xxx.mapper.modular.yearcheck,resources目录下新建路径为com/xxx/xxx/mapper/modular/yearcheck),所以Springboot就扫不到xml了。。。

  相关解决方案