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