Springcloud多模塊整合mybatis-plus


最近打算搭一個spring-cloud的框架,並打算整合mybatis-plus的插件。然后卻遇到了一個消耗了我十幾個鍾的問題。

出現的問題是:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.bestlmc.lihuamao.services.service.ITMenuService.getTest

這里顯示的是綁定的問題,然后我查了一下官方文檔,一般是以下幾個問題導致:

https://mp.baomidou.com/guide/faq.html#出現-invalid-bound-statement-not-found-異常

  • 檢查是不是引入 jar 沖突

  • 檢查 Mapper.java 的掃描路徑

    • 方法一:在 Configuration 類上使用注解 MapperScan

    @Configuration
    @MapperScan("com.yourpackage.*.mapper")
    public class YourConfigClass{
    ...
    }
    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
       MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
       //可以通過環境變量獲取你的mapper路徑,這樣mapper掃描可以通過配置文件配置了
       scannerConfigurer.setBasePackage("com.yourpackage.*.mapper");
       return scannerConfigurer;
    }
  • 檢查是否指定了主鍵?如未指定,則會導致 selectById 相關 ID 無法操作,請用注解 @TableId 注解表 ID 主鍵。當然 @TableId 注解可以沒有!但是你的主鍵必須叫 id(忽略大小寫)

  • SqlSessionFactory不要使用原生的,請使用MybatisSqlSessionFactory

  • 檢查是否自定義了SqlInjector,是否復寫了getMethodList()方法,該方法里是否注入了你需要的方法(可參考DefaultSqlInjector)

也有人說配置文件中,mybatis要改成mybatis-plus:

mybatis-plus:
mapper-locations: classpath*:/mapper/*Mapper.xml
type-aliases-package: com.bestlmc.lihuamao.commons.been    # 所有Entity別名類所在包

諸如此類,終究還是沒有效果。

但是我自己用springboot但模塊整合mybatis-plus使用的話還是正常的。然而,這跟我想要的效果不一樣。出於解耦的思想,我想要將service層和mapper層的代碼分離出來,作為一個公用的模塊。這樣便可以減少代碼的冗余。

只是按照這樣的模塊搭建,能成功運行,訪問接口的時間就會報org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 這樣的錯誤。

最終檢查多次之后,發現了問題出在啟動類中:

@SpringBootApplication
@EnableOpenApi
@MapperScan(basePackages = {
       "com.bestlmc.lihuamao.admin.config",
       "com.bestlmc.lihuamao.admin.controller",
       "com.bestlmc.lihuamao.services.service",
       "com.bestlmc.lihuamao.commons.config"})
public class AdminApplication {
   public static void main(String[] args) {
       SpringApplication.run(AdminApplication.class,args);
  }
}

@MapperScan只是掃描mapper的實現類

這里應該使用的是@ComponentScan,@ComponentScan適合掃描各類的been。

最終將MapperScan更換為ComponentScan,解決問題。

@SpringBootApplication
@EnableOpenApi
@ComponentScan(basePackages = {
       "com.bestlmc.lihuamao.admin.config",
       "com.bestlmc.lihuamao.admin.controller",
       "com.bestlmc.lihuamao.services.service",
       "com.bestlmc.lihuamao.commons.config"})
public class AdminApplication {
   public static void main(String[] args) {
       SpringApplication.run(AdminApplication.class,args);
  }
}

詳細代碼可以查看我的開源項目https://gitee.com/bestlmc/lihuamao_blog

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM