錯誤描述
問題描述:學習 Spring 和 Mybatis 進行整合時,出現
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): ...
開發工具:IDEA
解決方案
出現上述問題,一般原因是 xm l 映射文件有錯誤,也就是說 Mapper interface 和 其相關的 xml 文件的定義對應不上。
我們按以下步驟一一執行,嘗試解決:
- 檢查 xml 文件所在的 package 名稱是否和 interface 對應的 package 名稱一一對應
- 檢查 xml 文件的 namespace 是否和 xml 文件的 package 名稱一一對應
- 檢查函數名稱能否對應上
- 去掉 xml 文件中的中文注釋
- 隨意在 xml 文件中加一個空格或者空行然后保存(觸發了 ide 的自動編譯功能。由于 xml 文件在編譯的時候,不一定總能立即從源目錄復制到 class 文件的編譯目錄( MyEclipse 經常出這個問題),有時候你源目錄中的 xml 文件已經修改好了,而class所在的目錄里面還是舊的。因此真正確定有效的方式是將正確的 xml 文件復制到 class 輸出目錄。)
但是我按照上述方式并沒有解決問題,表示很奇怪,經過上網查詢,直至看到 IDEA異常解決: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) ,問題才得以解決,在這里向該博主表示感謝!
查看了發布之后的源代碼之后,發現 *Mapper.xml 文件并沒有發布到目標文件中
錯誤原因終于找到了,就是 xml 文件在發布時不會編譯,同時也不會發布到 target 中,導致項目運行時找不到 mapper.xml 文件。
解決方案:
第一步:將 *Mapper.xml 文件提取到指定文件夾 mapper 中,設置 mapper 文件夾類型為 resource
第二步:在 spring-mybatis.xml 配置文件中添加紅色框中的代碼對 mapper 文件進行掃描.
第三步:重新編譯執行,問題解決,target 文件夾下面出現 *Mapper.xml 文件
總結
eclipse 和 myeclipse 中 mapper.java 和 mapper.xml 在同一目錄下,直接配置掃描不會出現上述問題,但是使用編輯器 IDEA 會出現該問題,需要將 mapper.xml 文件指定為 resources 。