百度该问题,得到的答案不外如下几种:
出现这个错误时,按以下步骤检查一般就会解决问题:
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的配置文件所做的修改
之后就可以了。
如果你也遇到了跟我一样的问题,并且出错情形跟我一样,那不妨也按照该思路排错试试。