包路徑掃描引發的 MyBatis 異常 BindingException

異常信息html

    org.apache.ibatis.binding.BindingException:Invalid bound statement (not found): net.mytaotao.usermanager.core.user.service.UserService.getUserByIdapache

發現緣由mybatis

    這裏的 userService 成了 mybatis 針對 Mapper 產生的代理對象了 。 mapperInterface 是 net.mytaotao.usermanager.core.user.service.UserService 接口,並非某個 Mapper 接口,因此產生 org.apache.ibatis.binding.BindingException 異常。app

    致使以上現象的緣由jsp

    

    

    

說明 : basePackage 屬性支持 Ant 風格的通配符測試

(這個問題的緣由應該和 mybatis 的掃描和加載策略有關,具體源代碼我還沒看,只是猜想。)spa

解決問題代理

    因爲個人 basePackage 配置的問題 MapperScannerConfigurer 掃描到了 service 包下的接口,但這是錯誤的,並非咱們但願的。因此修改 basePackage 的配置爲 code

    

    

說明 : basePackage 屬性支持 Ant 風格的通配符htm

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 接口了。

相關文章
相關標籤/搜索