1. 程式人生 > >IDEA org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): xxx

IDEA org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): xxx

前言

在IDEA上執行Mybatis+Spring時,總是能碰到Eclipse上碰不到的問題,在Eclipse上沒一點問題,下面將錯誤即解決辦法記錄下來,希望可以幫到更多的人。

具體情況

由於我這邊的mapper.xml檔案是放在dao包下面的,和dao層介面放到同一個目錄,在IDEA上不會編譯src/main/java目錄下的xml檔案,因為IDEA預設是編譯resources目錄下的mapper.xml檔案即使你配置了也不會編譯,看下圖。
在這裡插入圖片描述
編譯後的classes,在專案目錄下的target目錄下。
在這裡插入圖片描述
可以看到編譯後的目錄下沒有生成我們想到的 IApiInfoDAO.xml檔案,所以執行的時候會出現異常。
具體異常如下:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.javaex.uscat.dao.user_info.IApiInfoDAO.select

解決辦法

1、可以將所有的mapper.xml放到resources目錄下。
2、可以在pom.xml檔案下新增下面配置即可。

<build>
	<resources>
		<!-- mapper.xml檔案在java目錄下 -->
		<resource>
			<directory>src/main/java</directory>
			<includes>
				<include>**/*.xml</include>
			</includes>
		</resource>
	</resources>
</build>

修改完成之後先clean一下,避免編譯的時候出問題,修改完從生新 install 一下可以看到,mapper.xml檔案在classes目錄下生成了。
在這裡插入圖片描述

補充

這裡補充幾個Mybatis的知識。
1、Mapper.java 和 Mapper.xml命名需要一致
2、包掃描能不能掃到.xml檔案
3、Mapper.xml的namespace配置是否準確,介面方法名是否準確

總結

1、以後碰到類似not found 的提示一定要記得檢查編譯到的檔案有沒有編譯完成。

================================================================================
感謝閱讀,寫得不好的地方請指教,能幫助到你是對我最好的回報,不卑不亢,加油。
請你記住比你優秀的一定比你努力,比你努力的人一定比你優秀。
================================================================================