今天同时发现一个问题,报错如下:
java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.wangyin.card.account.service.service.SendMessageService.sendMessage
at org.apache.ibatis.session.Configuration$StrictMap.get(Configuration.java:672)
at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:507)
at org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:500)
at org.apache.ibatis.binding.MapperMethod.setupCommandType(MapperMethod.java:240)
at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:71)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:39)
at com.sun.proxy.$Proxy27.sendMessage(Unknown Source)
该类及方法在其他应用中正常使用,由于进行业务拆分,将此功能从其他应用中迁移出来,迁移后报错如上。
解决过程:
1.百度下没有找到解决方法;
2.自己实现此接口(SendMessageService),并赋予新的名称,未报错;
3.将原有实现的service起个名字(sendMessageService),发现提示命名冲突;
4.检查发现mybatis在扫描dao包时,base-package范围过大,包含了dao接口包及service接口包,mybatis自动扫描将service按照dao服务来进行处理,导致出现该问题;
结论:开发过程中,一定要严谨;排查问题时,一定要细心。最主要的是,对自己所使用的框架,一定要很熟悉。