BindingException:Invalid bound statement (not found)如何解决

百度该问题,得到的答案不外如下几种:

出现这个错误时,按以下步骤检查一般就会解决问题:
1:检查xml文件所在package名称是否和Mapper interface所在的包名一一对应;
2:检查xml的namespace是否和xml文件的package名称一一对应;
3:检查方法名称是否对应;
4:去除xml文件中的中文注释;
5:随意在xml文件中加一个空格或者空行然后保存。

然而有的时候,却不一定是上述问题导致的。

问题到底在哪呢?

原来是因为不同数据源关联的两个DAO,我都放在同一个package下了,导致数据源扫描时,有时候无法识别正确的DAO

解决方式就是分别两个DAO再添加一个package,数据源配置中MapperScannerConfigurer扫描相应的package,这样就不会有问题了
在这里插入图片描述在这里插入图片描述
上面是我搜索这个问题的时候,查询到的答案,原文链接:
https://blog.csdn.net/z3278221/article/details/80614853


虽然上述答案没有100%回答了我的问题,但是借鉴了他的解决思路,我把我的问题也解决了。如下

我遇到这个问题时,在我的SringBoot项目中,我报错的原因是因为:我的不同的datasource的mapper接口文件,都放在同一个package下了,如下所示:
在这里插入图片描述
可以看到,在我的这个mapper文件夹下,同时放了两个datasource的mapper接口文件(分别是sjzt和shujia这两个datasource)

最终导致报错
在这里插入图片描述而且,我的这报错是具有随机性的!!这次启动项目报错sjzt这datasource下的方法没有声明,下次启动时可能又报shujia这个datasource下的方法没有绑定声明了(Invalid bound statement)!!!

参考了上面的改错思路,我做了如下修改,即把不同的数据源的mapper文件,放到了不同的文件夹中去,如下图所示:
在这里插入图片描述之后,再在各自datasource的配置文件中,指定扫描各自的mapper目录即可,如下是shujia这个datasource的配置文件所做的修改
在这里插入图片描述之后就可以了。

如果你也遇到了跟我一样的问题,并且出错情形跟我一样,那不妨也按照该思路排错试试。

猜你喜欢

转载自blog.csdn.net/qq_20068025/article/details/121939725