1. 程式人生 > >轉:IDEA異常解決: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

轉:IDEA異常解決: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

IDEA異常解決: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

 

原文地址:https://www.cnblogs.com/jstarseven/p/5803697.html

 

有時候解決問題不僅僅是解決問題。-----jstarseven

 

最近採用了開發工具IDEA開發SSM開發框架完成後,釋出的時候出現org.apache.ibatis.binding.BindingException: Invalid bound statement (not found。。。

一開始以為是自己配置檔案寫的有問題找了半天也沒有問題,之後才發現是自己對IDEA工具使用的不夠熟悉。

原來eclipse預設會幫你整合resources目錄下的mapper配置檔案,而idea不能自動識別,需要額外配置。

 

先說該異常常見解決方案:

一般是xml對映檔案有錯誤。但是這個提示不一定準確,以致網上有些資料說這個問題很奇怪。出現這個錯誤一般的解決方式在下面有說明:   一般的原因是Mapper interface和xml檔案的定義對應不上,需要檢查包名,namespace,函式名稱等能否對應上,需要比較細緻的對比。   按以下步驟一一執行: 1:檢查xml檔案所在的package名稱是否和interface對應的package名稱一一對應 2:檢查xml檔案的namespace是否和xml檔案的package名稱一一對應 3:檢查函式名稱能否對應上 4:去掉xml檔案中的中文註釋 5:隨意在xml檔案中加一個空格或者空行然後儲存(觸發了ide的自動編譯功能。由於xml檔案在編譯的時候,不一定總能立即從源目錄複製到class檔案的編譯目錄(MyEclipse經常出這個問題),有時候你源目錄中的xml檔案已經修改好了,而class所在的目錄裡面還是舊的。因此真正確定有效的方式是將正確的xml檔案複製到class輸出目錄。)   (博主使用IDEA工具) 但是博主在嘗試以上方案之後仍然報錯,在我查看了釋出之後的原始碼之後,發現*Mapper.xml檔案並沒有釋出到目標檔案中。 如圖所示: Mapper目錄:

釋出之後target目錄中:

居然沒有xml檔案,突然意識到了異常的原因:

idea中我將mapper型別是source,而xml檔案在釋出時不會編譯,同時也不會發布到target中,導致專案執行時找不到mapper.xml檔案。

解決方案:我將*Mapper.xml檔案提取到指定資料夾mapper中,設定mapper資料夾型別為resource,在application-dao.xml配置檔案中新增圖片中框選的程式碼對mapper檔案進行掃描。問題解決。

總結:

(1)eclipse、myeclipse、idea針對專案的檔案處理方式不一樣。

eclipse和myeclipse中mapper.java和mapper.xml在同一目錄下,直接配置掃描不會出現上述問題。

(2)注意xml檔案的準確性。

 

 

 

原文地址:https://www.cnblogs.com/jstarseven/p/5803697.html

 

有時候解決問題不僅僅是解決問題。-----jstarseven

 

最近採用了開發工具IDEA開發SSM開發框架完成後,釋出的時候出現org.apache.ibatis.binding.BindingException: Invalid bound statement (not found。。。

一開始以為是自己配置檔案寫的有問題找了半天也沒有問題,之後才發現是自己對IDEA工具使用的不夠熟悉。

原來eclipse預設會幫你整合resources目錄下的mapper配置檔案,而idea不能自動識別,需要額外配置。

 

先說該異常常見解決方案:

一般是xml對映檔案有錯誤。但是這個提示不一定準確,以致網上有些資料說這個問題很奇怪。出現這個錯誤一般的解決方式在下面有說明:   一般的原因是Mapper interface和xml檔案的定義對應不上,需要檢查包名,namespace,函式名稱等能否對應上,需要比較細緻的對比。   按以下步驟一一執行: 1:檢查xml檔案所在的package名稱是否和interface對應的package名稱一一對應 2:檢查xml檔案的namespace是否和xml檔案的package名稱一一對應 3:檢查函式名稱能否對應上 4:去掉xml檔案中的中文註釋 5:隨意在xml檔案中加一個空格或者空行然後儲存(觸發了ide的自動編譯功能。由於xml檔案在編譯的時候,不一定總能立即從源目錄複製到class檔案的編譯目錄(MyEclipse經常出這個問題),有時候你源目錄中的xml檔案已經修改好了,而class所在的目錄裡面還是舊的。因此真正確定有效的方式是將正確的xml檔案複製到class輸出目錄。)   (博主使用IDEA工具) 但是博主在嘗試以上方案之後仍然報錯,在我查看了釋出之後的原始碼之後,發現*Mapper.xml檔案並沒有釋出到目標檔案中。 如圖所示: Mapper目錄:

釋出之後target目錄中:

居然沒有xml檔案,突然意識到了異常的原因:

idea中我將mapper型別是source,而xml檔案在釋出時不會編譯,同時也不會發布到target中,導致專案執行時找不到mapper.xml檔案。

解決方案:我將*Mapper.xml檔案提取到指定資料夾mapper中,設定mapper資料夾型別為resource,在application-dao.xml配置檔案中新增圖片中框選的程式碼對mapper檔案進行掃描。問題解決。

總結:

(1)eclipse、myeclipse、idea針對專案的檔案處理方式不一樣。

eclipse和myeclipse中mapper.java和mapper.xml在同一目錄下,直接配置掃描不會出現上述問題。

(2)注意xml檔案的準確性。