一、问题描述

在学习mybatis时需要创建一个新项目,可是配置完试的时候,报了Invalid bound statement (not found)错误
什么意思呢?
就是mapper.xml文件和mapper接口没有对应起来呗~
在这里插入图片描述

二、解决过程

看了很多大佬已经总结好的问题,无非就是namespace写错了、mapper接口或者xml文件名字没对应上等(这里可以参考这篇文章:Invalid bound statement (not found)出现原因和解决方法),当然我多次排查之后发现,确实没这方面问题 = =
那就是mybatis配置文件里的问题了,毕竟xml文件和接口映射的语句写在这里了嘛。
以下是我的mybatis配置文件里映射部分和文件结构。
在这里插入图片描述

三、关键点来了!

众所周知,现在建立xml文件一定是在resources文件下建立一个和接口所在包相同名称的文件夹。所以,当其他地方都没有问题的时候,你就要考虑一下自己resources下的mapper文件夹如果像我一样是 嵌套的 !!那你在建立的时候如果不是一个一个文件夹的建立,而是想直接建一个多层嵌套的文件夹,就会建成一个名为"com.tim.mapper"的单个文件夹,然后一定会报我这个错误。即使这两种方法建立的文件夹结果是一样的形式!
所以正确方法:
1、先建第一个文件件在这里插入图片描述2、再建第二个文件夹在这里插入图片描述
3、此时可以看出,此时建成的多层文件夹(如下图)和之前用“com.tim.mapper”所建成的一个名为:com.tim.mapper文件夹是有本质区别滴(虽然长得差不多= =)
在这里插入图片描述
4、但是映射去寻找的时候,只能找到多层文件夹下的文件~

2023.1.28 补充----------------------------------
才看到评论里有大佬指出了根本问题:在resources文件夹下建立子文件使用的分隔符是 “/” ,这和在java文件夹下建立子文件所用的分隔符 “.” 是不一样滴。因此:再建一个文件,使用"com/tim/lala"在这里插入图片描述
也可以得到与分开建一样的效果~
在这里插入图片描述

总结

血与泪的教训,在resources里建多层文件夹的时候千万不能和mapper接口文件夹里一样直接建,一定要分开(或使用补充的方法建),希望这个凌晨两点终于解决的这个问题能帮到你们。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐