一、问题描述
使用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 !