一、問題描述
使用springboot + mybatis的項目在本地可以正常運行,但當使用maven打包部署到遠程服務器上時出現了映射錯誤,異常信息爲:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): cn.xdf.yn.api.mapper.ExamBasTestMapper.findByTestId
二、問題本質是mapper接口與對應的xml未映射上
可能情況:
1.mapper層的方法和mapper.xml中的方法不一樣;
2.mapper中的namespace resultParameter 和對應的dao層entity層不一樣
3.拼寫錯誤 如漏寫 少寫 多寫…
4.如果還報錯,檢查一下部署項目指定目錄下有對應的xml文件嗎(我的是屬於這種情況)
- war包裏面缺少Mapper對應的xml文件,也就是沒有把xml文件打包進去。
- 解決辦法是,在pom.xml文件中的build標籤中添加如下代碼,顯示的強制將xml文件打到war包中:
<!--解決 mapper接口與xml文件方法 映射問題 -->
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<filtering>false</filtering>
<includes>
<include>**/*.dll</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<filtering>false</filtering>
<includes>
<include>**/*.so</include>
</includes>
</resource>
<!-- 把xml文件所在的mapper文件夾丟進target/classes/包名/目錄下 -->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<!-- 是否替換資源中的屬性-->
<filtering>false</filtering>
</resource>
</resources>
最後,重新打包部署,啓動測試OK !