异常信息
org.apache.ibatis.binding.BindingException:Invalid bound statement (not found): net.mytaotao.usermanager.core.user.service.UserService.getUserById
发现原因
这里的 userService 成了 mybatis 针对 Mapper 产生的代理对象了 。 mapperInterface 是 net.mytaotao.usermanager.core.user.service.UserService 接口,并不是某个 Mapper 接口,所以产生 org.apache.ibatis.binding.BindingException 异常。
导致以上现象的原因
说明 : basePackage 属性支持 Ant 风格的通配符
(这个问题的原因应该和 mybatis 的扫描和加载策略有关,具体源代码我还没看,只是猜测。)
解决问题
由于我的 basePackage 配置的问题 MapperScannerConfigurer 扫描到了 service 包下的接口,但这是错误的,并不是我们希望的。所以修改 basePackage 的配置为
说明 : basePackage 属性支持 Ant 风格的通配符
Ant通配符
?
匹配任何单字符*
匹配0或者任意数量的字符**
匹配0或者更多的目录
举例
/project/*.a
匹配项目根路径下所有在project路径下的.a文件/project/p?ttern
匹配项目根路径下 /project/pattern 和 /app/pXttern,但是不包括/app/pttern/**/example
匹配项目根路径下 /project/example, /project/foow/example, 和 /example/project/**/dir/file.*
匹配项目根路径下/project/dir/file.jsp, /project/foow/dir/file.html/**/*.jsp
匹配项目根路径下任何的.jsp 文件
测试
这时 UserService 中已经注入了 UserMapper ,而 mapperInterface 也是正确的 UserMapper 接口了。