解决Invalid bound statement (not found)(Mybatis的Mapper绑定问题)
【就是mappder的xml文件没有编译到target的对应目录里去,
最终这个方法解决问题:
2、在pom.xml文件build添加resource资源列表。
<!--这个元素描述了项目相关的所有资源路径列表,例如和项目相关的属性文件,这些资源被包含在最终的打包文件里。-->
<resources>
<resource>
<!-- 描述存放资源的目录,该路径相对POM路径-->
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
转:
解决Invalid bound statement (not found)(Mybatis的Mapper绑定问题)
一、问题描述
使用mybatis的项目在本地可以正常运行,但当使用maven或Jenkins打包部署到服务器上时出现了绑定错误,异常信息为:
org.apache.ibatis.binding.BindingException: Invalid bound
statement (not found):
com.yo.news.user.mapper.UserMapper.getUserByTelPwd
二、问题分析和解决方法
首先,给定的异常提示信息并不精准,有多个错误原因都会抛出该异常。mybatis出现这个问题,通常是由Mapper interface和对应的xml文件的定义对应不上引起的,这时就需要仔细检查对比包名、xml中的namespace、接口中的方法名称等是否对应。我之前就因为称忘记在xml标签的id属性中添加方法名或写错方法名而出现这个错误。
出现这个错误时,按以下步骤检查一般就会解决问题:
1:检查xml文件所在package名称是否和Mapper interface所在的包名一一对应;
2:检查xml的namespace是否和xml文件的package名称一一对应;
3:检查方法名称是否对应;
4:去除xml文件中的中文注释;
5:随意在xml文件中加一个空格或者空行然后保存。
--------------------------------
原来Maven 为我们提供了一致的项目目录配置(源文件夹、资源文件夹等),在自动构建项目时, Maven 会按照这个配置来执行操作(编译源文件、拷贝资源文件),Maven 默认的源文件夹及资源文件夹的配置代码如下:
<build>
<sourceDirectory>src/main/java</sourceDirectory >
<testSourceDirectory>src/test/java</testSourceDirectory >
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
</testResources>
</build>
解决方案有2种:
1、可以把xml文件放到resource目录下,这样项目构建的时候会加载到target。
2、在pom.xml文件build添加resource资源列表。
<!--这个元素描述了项目相关的所有资源路径列表,例如和项目相关的属性文件,这些资源被包含在最终的打包文件里。-->
<resources>
<resource>
<!-- 描述存放资源的目录,该路径相对POM路径-->
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
总结
如果出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)错误,一般的原因是Mapper interface和xml文件的定义对应不上,需要检查包名,namespace,函数名称等能否对应上,需要比较细致的对比,按以下步骤一一执行:
1、检查xml文件所在的package名称是否和interface对应的package名称一一对应
2、检查xml文件的namespace是否和xml文件的package名称一一对应
3、检查函数名称能否对应上
4、去掉xml文件中的中文注释
5、随意在xml文件中加一个空格或者空行然后保存
除此之外,我遇到的还有一些特殊情况,耽误了我不少时间,网上有其他原因也导致bound找不到:
1、Intellij Idea 的包名和目录名生成机制,新建一个包a.b.c.d,目录结构不是a->b->c->d,而是生成"a.b.c.d"的目录,进而导致mybatis映射错误,此错误很难排查。
2、xml文件定义如下:
<select id="countMembers" parameterMap="java.util.Map" resultType="java.lang.Integer">
parameterMap用错,应该为parameterType,此错误会导致mybatis所有的mapper都报绑定错误,很坑。
相关文章
- AuthenticationException: The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot
- 解决MyBatis报错 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
- Endpoint ID 'service-registry' contains invalid characters, please migrate to a valid format.
- kafka消费者报错INVALID_FETCH_SESSION_EPOCH
- Uncaught Invalid geoJson format TypeError Cannot read properties of undefined (reading ‘length‘)
- Mongo的Invalid BSON field name $gte
- IntelliJ中Git突然不能用,报错 xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools)
- Mybatis出错: Cause: org.apache.ibatis.reflection.ReflectionException: Error instantiating class com.cyf.pojo.User with invalid types () or values ()
- git error:invalid path
- java.lang.IllegalArgumentException: sheetName '' is invalid
- 微擎签名出错 invalid signature
- 解决python manage.py时报错:File "manage.py", line 17 from excs ^ SyntaxError: invalid syntax
- IDE连接MySQL报错:Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezone‘ property