日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

解决Mybatis启动报错: Invalid bound statement (not found)

發布時間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解决Mybatis启动报错: Invalid bound statement (not found) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、問題描述

使用mybatis的項目在本地可以正常運行,但當使用maven或Jenkins打包部署到服務器上時出現了綁定錯誤,異常信息為:

org.apache.ibatis.binding.BindingException: Invalid bound statement
(not found): com.yo.news.user.mapper.UserMapper.getUserByTelPwd

二、問題分析和解決方法

首先,給定的異常提示信息并不精準,有多個錯誤原因都會拋出該異常。mybatis出現這個問題,通常是由Mapper interface和對應的xml文件的定義對應不上引起的,這時就需要仔細檢查對比包名、xml中的namespace、接口中的方法名稱等是否對應。我之前就因為稱忘記在xml標簽的id屬性中添加方法名或寫錯方法名而出現這個錯誤。

出現這個錯誤時,按以下步驟檢查一般就會解決問題:

1:檢查xml文件所在package名稱是否和Mapper interface所在的包名一一對應; 2:檢查xml的namespace是否和xml文件的package名稱一一對應; 3:檢查方法名稱是否對應; 4:去除xml文件中的中文注釋; 5:隨意在xml文件中加一個空格或者空行然后保存。

但是!!!!!!最后發現問題所在:maven項目的約定配置文件必須放resources里,src目錄下的xml文件默認不會編譯到target。由于我把mapper.xml放在了src目錄里,才導致了錯誤的發生,該問題的實質是,idea對classpath的規定。在eclipse中,把資源文件放在src文件夾下,是可以找到的;但是在idea中,直接把資源文件放在src文件夾下,如果不進行設置,是不能被找到的。

原來Maven 為我們提供了一致的項目目錄配置(源文件夾、資源文件夾等),在自動構建項目時, Maven 會按照這個配置來執行操作(編譯源文件、拷貝資源文件),Maven 默認的源文件夾及資源文件夾的配置代碼如下:

<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目錄下,這樣項目構建的時候會加載到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><!-- 描述存放資源的目錄,該路徑相對POM路徑--><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build>

總結:

如果出現org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)錯誤,一般的原因是Mapper interface和xml文件的定義對應不上,需要檢查包名,namespace,函數名稱等能否對應上,需要比較細致的對比,按以下步驟一一執行. 或者是idea開發maven項目,maven不能識別src/main/java中的配置文件

1、檢查xml文件所在的package名稱是否和interface對應的package名稱一一對應2、檢查xml文件的namespace是否和xml文件的package名稱一一對應3、檢查函數名稱能否對應上4、去掉xml文件中的中文注釋5、隨意在xml文件中加一個空格或者空行然后保存

除此之外,我遇到的還有一些特殊情況,耽誤了我不少時間,網上有其他原因也導致bound找不到:

  • Intellij Idea的包名和目錄名生成機制,新建一個包a.b.c.d,目錄結構不是a->b->c->d,而是生成"a.b.c.d"的目錄,進而導致mybatis映射錯誤,此錯誤很難排查。
  • xml文件定義如下:
  • <select id="countMembers" parameterMap="java.util.Map" resultType="java.lang.Integer">

    parameterMap用錯,應該為parameterType,此錯誤會導致mybatis所有的mapper都報綁定錯誤,很坑。

    轉自博客園:https://www.cnblogs.com/itzyz/p/10954427.html

    總結

    以上是生活随笔為你收集整理的解决Mybatis启动报错: Invalid bound statement (not found)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。