解決mybatis-plus-boot-starter與mybatis-spring-boot-starter的錯誤問題
mybatis-plus-boot-starter與mybatis-spring-boot-starter的錯誤
不是知道你是否 出現(xiàn)過這樣的錯誤
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
經(jīng)過各種度娘,無非就是讓你檢查三種情況
- 情況一:mapper.xml沒有按照傳統(tǒng)的maven架構(gòu)進行放置
- 情況二:mybatis的配置信息出錯
- 情況三:idea的編譯問題,idea有的時候沒有編譯生成相應的xml。在idea的target->classes下面沒有找到相應的存在xml的文件夾,該文件夾里面有沒有對應的mapper(實體名).xml文件
如果 程序中這三種情況都沒有出現(xiàn) ,那么,再看看 我遇到的問題。
首先我那個是個單元測試 這個時候我的數(shù)據(jù)是能出來的,但是。。。。
細心的同學可能發(fā)現(xiàn)了 如果字段沒有加 as做別名映射,實體類字段是不能被賦值的。
于是,是不是實體類上加上@TableName @TableField 就好了,于是我加上了。。。
此時我引用的依賴是
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency>
但是 @TableName @TableField 的包是com.baomidou.mybatisplus.annotation里邊的 所以要更改引用依賴
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.1</version> </dependency>
一切準備就緒。。。??啟動。。。
報錯。。。。??
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.cdliker.infrastructure.persistent.dao.IAwardDao.getAwardPOList
于是 排查了三種情況,都不符合。所以目標就鎖定了 依賴上,
mybatis-plus-boot-starte與mybatis-spring-boot-starter的區(qū)別
1. 功能與特性
mybatis-plus-boot-starter:
- 自動配置:能夠自動配置MyBatis-Plus,減少手動配置的工作量。
- CRUD操作簡化:提供了一套默認的Service和Mapper實現(xiàn),使得CRUD操作更加簡便,減少了大量的樣板代碼。
- 動態(tài)SQL:支持動態(tài)SQL,提供了豐富的查詢功能,使得構(gòu)建復雜查詢變得更加容易。
- 代碼生成器:內(nèi)置代碼生成器,可以快速生成Entity、Mapper、Mapper XML、Service、ServiceImpl、Controller等代碼,提高開發(fā)效率。
- 分頁插件:提供分頁插件,支持一鍵分頁,簡化分頁查詢的實現(xiàn)。
- 性能分析插件:提供性能分析插件,可以分析SQL執(zhí)行性能,幫助優(yōu)化SQL查詢。
- 擴展性:提供了豐富的擴展點,允許開發(fā)者根據(jù)需要進行自定義擴展。
- 與Spring Boot集成:無縫集成Spring Boot,無需額外的配置,易于使用。
mybatis-spring-boot-starter:
- 自動配置:支持MyBatis的自動配置,包括數(shù)據(jù)源、SqlSessionFactory和Mapper掃描等。
- 簡化配置:通過Spring Boot的自動配置特性,大大簡化了MyBatis的配置過程。
- 常用功能:提供了配置數(shù)據(jù)源、生成MyBatis的SqlSessionFactory、掃描Mapper文件等常用功能。
- 與Spring Boot協(xié)同工作:使MyBatis和Spring Boot更加容易協(xié)同工作,提高開發(fā)效率。
2. 使用場景
- mybatis-plus-boot-starter:更適用于需要快速開發(fā)、簡化CRUD操作、提高開發(fā)效率的Spring Boot項目。它提供了更多高級特性和擴展點,適合對數(shù)據(jù)庫操作有較多定制需求的場景。
- mybatis-spring-boot-starter:適用于需要將MyBatis框架集成到Spring Boot項目中的基本場景。它提供了基本的自動配置和常用功能,適合對數(shù)據(jù)庫操作要求不是特別復雜或需要快速集成的項目。
3. 依賴關系
值得注意的是,mybatis-plus-boot-starter在其內(nèi)部已經(jīng)包含了mybatis-spring-boot-starter的依賴(或者至少包含了與MyBatis集成所需的關鍵依賴),因此在大多數(shù)情況下,如果你選擇了mybatis-plus-boot-starter,就無需再額外引入mybatis-spring-boot-starter。這也是為什么在一些項目中,同時引入這兩個starter時,移除其中一個并不會對項目運行造成影響的原因。
綜上所述,mybatis-plus-boot-starter和mybatis-spring-boot-starter在功能和特性上有所區(qū)別,選擇哪個啟動器主要取決于你的項目需求和對數(shù)據(jù)庫操作的具體要求。如果你需要更多的高級特性和擴展性,可以選擇mybatis-plus-boot-starter;如果你只是需要基本的MyBatis集成功能,那么mybatis-spring-boot-starter就足夠了。
正常的三種情況 出發(fā)點都是掃描的問題,難道問題還在掃描?既然mybatis-plus包含mybatis 那么。。。
mybatis-plus-boot-starter 時遇到 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 這樣的錯誤,而切換到 mybatis-spring-boot-starter 后錯誤消失,這通常意味著 MyBatis 或 MyBatis-Plus 在尋找或解析 Mapper 接口與其對應的 XML 映射文件時出現(xiàn)了問題??赡軙霈F(xiàn)以下情況
1.Mapper 接口與 XML 映射文件的位置或命名不匹配:
確保 Mapper 接口和 XML 映射文件位于正確的包路徑下,并且文件名與接口名匹配(去掉接口名中的 I 前綴,并加上 .xml 后綴)。
檢查 XML 映射文件的 namespace 是否與 Mapper 接口的全限定名完全一致。
2.Mapper 掃描路徑未正確配置:
在 Spring Boot 配置中,確保你已經(jīng)正確配置了 Mapper 掃描路徑。這可以通過 @MapperScan 注解或在 application.properties/application.yml 文件中設置 mybatis-plus.mapper-locations 來實現(xiàn)。
如果你的 Mapper 接口和 XML 文件位于不同的包路徑下,你需要確保 @MapperScan 注解或配置屬性包含了所有這些路徑。
XML 映射文件未正確放置在資源目錄中:
確保 XML 映射文件被放置在 Spring Boot 項目的資源目錄(如 src/main/resources)中,并且其路徑與 Mapper 接口的路徑相對應。
3.依賴沖突:
檢查你的項目依賴,確保沒有引入多個版本的 MyBatis 或 MyBatis-Plus,這可能會導致類加載器加載了錯誤的類。
如果你的項目中同時包含了 mybatis-spring-boot-starter 和 mybatis-plus-boot-starter,確保只保留一個,因為它們是互斥的。
Spring Boot 的自動配置問題:
有時候,Spring Boot 的自動配置可能不會按預期工作。嘗試在 application.properties/application.yml 中顯式配置 MyBatis-Plus 的相關屬性,或者在你的配置類中手動配置 SqlSessionFactory 和 MapperScannerConfigurer。
4.檢查 MyBatis-Plus 特有的配置:
如果你在使用 MyBatis-Plus 特有的功能(如分頁插件、自動填充等),請確保你已經(jīng)按照 MyBatis-Plus 的要求進行了配置。
5.IDE 或構(gòu)建工具的問題:
有時候,IDE(如 IntelliJ IDEA 或 Eclipse)或構(gòu)建工具(如 Maven 或 Gradle)可能沒有正確更新或同步你的項目配置。
嘗試重啟 IDE、重新構(gòu)建項目或清理并重新導入 Maven/Gradle 依賴。
6.查看日志和錯誤堆棧:
仔細查看錯誤堆棧和 Spring Boot 的啟動日志,可能會有更多關于為什么 MyBatis 找不到綁定語句的線索。
配置,配置 application.properties/application.yml 文件中設置 mybatis-plus.mapper-locations 來實現(xiàn)
在使用 mybatis-spring-boot-starter 的時候 使用
mybatis: mapper-locations: classpath:/mybatis/mapper/*.xml config-location: classpath:/mybatis/config/mybatis-config.xml
在使用 mybatis-plus-boot-starter 的時候 使用
mybatis-plus: mapper-locations: classpath:/mybatis/mapper/*.xml config-location: classpath:/mybatis/config/mybatis-config.xml
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SSH框架網(wǎng)上商城項目第25戰(zhàn)之使用java email給用戶發(fā)送郵件
這篇文章主要為大家詳細介紹了SSH框架網(wǎng)上商城項目第25戰(zhàn)之使用java email給用戶發(fā)送郵件,感興趣的小伙伴們可以參考一下2016-06-06使用Spring-Retry解決Spring Boot應用程序中的重試問題
重試的使用場景比較多,比如調(diào)用遠程服務時,由于網(wǎng)絡或者服務端響應慢導致調(diào)用超時,此時可以多重試幾次。用定時任務也可以實現(xiàn)重試的效果,但比較麻煩,用Spring Retry的話一個注解搞定所有,感興趣的可以了解一下2023-04-04深入分析Spring BeanDefinition的構(gòu)造元信息
Bean Definition是一個包含Bean元數(shù)據(jù)的對象,它描述了如何創(chuàng)建Bean實例、Bean屬性的值以及Bean之間的依賴關系,本文將帶大家深入分析Spring BeanDefinition的構(gòu)造元信息,需要的朋友可以參考下2024-01-01Java 在volatile內(nèi)部調(diào)用接口的方法
在Java中,volatile?關鍵字通常用于確保變量的可見性和有序性,而不是用來修飾接口或方法調(diào)用的,這篇文章主要介紹了Java 在volatile內(nèi)部調(diào)用接口的方法,需要的朋友可以參考下2024-07-07淺談StringEntity 和 UrlEncodedFormEntity之間的區(qū)別
這篇文章主要介紹了StringEntity 和 UrlEncodedFormEntity之間的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06java8實現(xiàn)list集合中按照某一個值相加求和,平均值等操作代碼
這篇文章主要介紹了java8實現(xiàn)list集合中按照某一個值相加求和,平均值等操作代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08