【SSM框架】【怠惰致错】Invalid bound statement (not found)

Invalid bound statement (not found)
直译为 无效的绑定声明(无法找到)

刚开始出现这个异常时,以为自己尝试了网上所有方案,最后发现是自己的粗心所导致的异常

网上方案如下图

【SSM框架】【怠惰致错】Invalid bound statement (not found)

尝试了以上某些方案均不行

后来,觉得尝试了上面方案中的倒数第二种,即将mapper.xml与mapper接口放在同一个包中,如下图(实际上可以不用,只要在spring的配置文件中配置mapper位置即可不用将xml文件与接口放在同一个包中)
before:
【SSM框架】【怠惰致错】Invalid bound statement (not found)
after:
【SSM框架】【怠惰致错】Invalid bound statement (not found)
没想到异常消失了,但还是不懂其原理,为了明白原理,我再次去看了看我的spring配置文件中的配置dao层的配置文件,即applicationContext-dao.xml(我将spring配置文件分为了3个,也可以直接写在一个文件中,但那样子比较乱,我喜欢简洁点,所以分开写了)

震惊地发现,原来是我之前重命名项目包时,右键rename,以为可以搞定一切,所有的名称引用都可以被eclipse重命名,结果applicationContext-dao.xml中的mapperLocations里的value不能被eclipse重命名,要手动更改,不然还是我重命名前的项目包名,而不是重命名后的,如下图
before:
【SSM框架】【怠惰致错】Invalid bound statement (not found)
after:
【SSM框架】【怠惰致错】Invalid bound statement (not found)
因为我项目包重命名过了,而mapperLocations的value还是重命名前的项目包名,所以就出现了Invalid bound statement (not found)的异常

真是太依赖工具,加上怠惰而引发的致命bug

至于之前为什么把mapper.xml与mapper接口放在同一个包中不会出现那个异常,我猜十有八九是因为spring在配置文件中指定的mapperLocations找不到xml文件,就会在mapper接口所在的文件再找一次,都没找到的话,就会出现Invalid bound statement (not found)的异常