解决Mybatis启动报错: Invalid bound statement (not found)
一、問題描述
使用mybatis的項(xiàng)目在本地可以正常運(yùn)行,但當(dāng)使用maven或Jenkins打包部署到服務(wù)器上時(shí)出現(xiàn)了綁定錯(cuò)誤,異常信息為:
org.apache.ibatis.binding.BindingException: Invalid bound statement
(not found): com.yo.news.user.mapper.UserMapper.getUserByTelPwd
二、問題分析和解決方法
首先,給定的異常提示信息并不精準(zhǔn),有多個(gè)錯(cuò)誤原因都會(huì)拋出該異常。mybatis出現(xiàn)這個(gè)問題,通常是由Mapper interface和對(duì)應(yīng)的xml文件的定義對(duì)應(yīng)不上引起的,這時(shí)就需要仔細(xì)檢查對(duì)比包名、xml中的namespace、接口中的方法名稱等是否對(duì)應(yīng)。我之前就因?yàn)榉Q忘記在xml標(biāo)簽的id屬性中添加方法名或?qū)戝e(cuò)方法名而出現(xiàn)這個(gè)錯(cuò)誤。
出現(xiàn)這個(gè)錯(cuò)誤時(shí),按以下步驟檢查一般就會(huì)解決問題:
1:檢查xml文件所在package名稱是否和Mapper interface所在的包名一一對(duì)應(yīng); 2:檢查xml的namespace是否和xml文件的package名稱一一對(duì)應(yīng); 3:檢查方法名稱是否對(duì)應(yīng); 4:去除xml文件中的中文注釋; 5:隨意在xml文件中加一個(gè)空格或者空行然后保存。但是!!!!!!最后發(fā)現(xiàn)問題所在:maven項(xiàng)目的約定配置文件必須放resources里,src目錄下的xml文件默認(rèn)不會(huì)編譯到target。由于我把mapper.xml放在了src目錄里,才導(dǎo)致了錯(cuò)誤的發(fā)生,該問題的實(shí)質(zhì)是,idea對(duì)classpath的規(guī)定。在eclipse中,把資源文件放在src文件夾下,是可以找到的;但是在idea中,直接把資源文件放在src文件夾下,如果不進(jìn)行設(shè)置,是不能被找到的。
原來Maven 為我們提供了一致的項(xiàng)目目錄配置(源文件夾、資源文件夾等),在自動(dòng)構(gòu)建項(xiàng)目時(shí), Maven 會(huì)按照這個(gè)配置來執(zhí)行操作(編譯源文件、拷貝資源文件),Maven 默認(rèn)的源文件夾及資源文件夾的配置代碼如下:
<build> <sourceDirectory>src/main/java</sourceDirectory > <testSourceDirectory>src/test/java</testSourceDirectory > <resources> <resource> <directory>src/main/resources</directory> </resource> </resources> <testResources> <testResource> <directory>src/test/resources</directory> </testResource> </testResources> </build>解決方案有2種:
1、可以把xml文件放到resource目錄下,這樣項(xiàng)目構(gòu)建的時(shí)候會(huì)加載到target。 2、在pom.xml文件build添加resource資源列表。 <build><resources><resource><directory>src/main/resources</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes><filtering>true</filtering></resource><resource><!-- 描述存放資源的目錄,該路徑相對(duì)POM路徑--><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build>總結(jié):
如果出現(xiàn)org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)錯(cuò)誤,一般的原因是Mapper interface和xml文件的定義對(duì)應(yīng)不上,需要檢查包名,namespace,函數(shù)名稱等能否對(duì)應(yīng)上,需要比較細(xì)致的對(duì)比,按以下步驟一一執(zhí)行. 或者是idea開發(fā)maven項(xiàng)目,maven不能識(shí)別src/main/java中的配置文件
1、檢查xml文件所在的package名稱是否和interface對(duì)應(yīng)的package名稱一一對(duì)應(yīng)2、檢查xml文件的namespace是否和xml文件的package名稱一一對(duì)應(yīng)3、檢查函數(shù)名稱能否對(duì)應(yīng)上4、去掉xml文件中的中文注釋5、隨意在xml文件中加一個(gè)空格或者空行然后保存除此之外,我遇到的還有一些特殊情況,耽誤了我不少時(shí)間,網(wǎng)上有其他原因也導(dǎo)致bound找不到:
parameterMap用錯(cuò),應(yīng)該為parameterType,此錯(cuò)誤會(huì)導(dǎo)致mybatis所有的mapper都報(bào)綁定錯(cuò)誤,很坑。
轉(zhuǎn)自博客園:https://www.cnblogs.com/itzyz/p/10954427.html
總結(jié)
以上是生活随笔為你收集整理的解决Mybatis启动报错: Invalid bound statement (not found)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Vue学习01-v-on事件修饰符
- 下一篇: Mybatis框架的操作步骤和细节处理