当前位置: 首页 > news >正文

mybatis绑定错误-- Invalid bound statement (not found)


在弄spring boot的时候遇到了一个很奇怪的问题,然后找了好久的答案都解决不了,最后找到了下面的这个文章。最后的解决是在pom.xml文件中添加了下面的代码的方法。

<resources>
			<resource>
				<directory>src/main/java</directory>
				<includes>
					<include>**/*.xml</include>
				</includes>
				<filtering>false</filtering>
			</resource>
		</resources>
对应了下面的解决办法。

一、问题描述

使用mybatis的项目在本地可以正常运行,但当使用maven或Jenkins打包部署到远程服务器上时出现了绑定错误,异常信息为:

 Invalid bound statement (not found)

二、问题分析和解决方法

首先,给定的异常提示信息并不精准,有多个错误原因都会抛出该异常。mybatis出现这个问题,通常是由Mapper interface和对应的xml文件的定义对应不上引起的,这时就需要仔细检查对比包名、xml中的namespace、接口中的方法名称等是否对应。我之前就因为称忘记在xml标签的id属性中添加方法名或写错方法名而出现这个错误。

出现这个错误时,按以下步骤检查一般就会解决问题:
1:检查xml文件所在package名称是否和Mapper interface所在的包名一一对应;
2:检查xml的namespace是否和xml文件的package名称一一对应;
3:检查方法名称是否对应;
4:去除xml文件中的中文注释;
5:随意在xml文件中加一个空格或者空行然后保存。

我在项目中遇到的问题可以使用最后的解决方法解决:“随意在xml文件中加一个空格或者空行然后保存”,看起来这么怪异的解决方式,实际上是触发了IDE的自动编译功能。由于xml文件在编译的时候,不一定总能立即从源目录复制到class文件的编译目录(MyEclipse经常出这个问题),有时候你源目录中的xml文件已经修改好了,而class所在的目录里面还是旧的。因此真正确定有效的方式是将正确的xml文件复制到class输出目录。

发现了问题就要从根本上解决,而不应该当出现了问题再去解决。我最后发现Jenkins通过maven把项目打成war包,或者Eclipse通过使用maven命令tomcat7:deploy远程自动部署项目打成的war包,war包里面缺少Mapper对应的xml文件,也就是没有把xml文件打包进去。解决办法是,在pom.xml文件中的build标签中添加如下代码,显示的强制将xml文件打到war包中:

<resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
</resources>
pom文件.png

还有种情况会出这个错误,比如配置xml映射文件需要满足特定要求:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"  
    p:dataSource-ref="dataSource"  p:configLocation="classpath:mybatis-config.xml">
    <property name="mapperLocations">
        <list>
            <value>classpath*:mapper/com/xxx/**/*Mapper.xml</value>
            <value>classpath*:dao/com/xxx/**/*Mapper.xml</value>
        </list>
    </property>
 </bean>

如上只有Mapper结尾的xml文件才会被Mybatis扫描到,这个时候如果忘记了这个规则,xml使用了其他名称,如xxxDao.xml。这样xml的配置就不会加入到Mybatis存储配置的一个map对象里去,也会出现 Invalid bound statement 的错误。解决方法就是把xml文件改名即可。



作者:michael_wlq
链接:https://www.jianshu.com/p/800fe918cc7a
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关文章:

  • 10.5 搜索的优化版
  • Java中isEmpty和null以及“”的区别
  • wMy_Python ~储存相关~
  • Bean注入报错:org.springframework.beans.factory.BeanCreationException
  • ORA-00918: 未明确定义列
  • [转] 32位 PL/SQL Develope r如何连接64位的Oracle 图解
  • 拥有300万安装量的应用是如何恶意推广刷榜的?
  • IntelliJ IDEA 创建 Java web Maven项目
  • 示波器高压差分探头的了解及常见测量方法
  • js中截取文件的后缀名方法
  • jQuery通过ajax传送数组
  • KEngine:Unity3D资源的打包、加载、调试监控
  • 用idea打包spring boot项目,然后部署到Linux服务器上
  • linux 下查看机器是cpu是几核的(转)
  • 阿里巴巴 Java 开发手册--学习(一)
  • [译]Python中的类属性与实例属性的区别
  • 【node学习】协程
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • PAT A1050
  • php的插入排序,通过双层for循环
  • Python连接Oracle
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 你真的知道 == 和 equals 的区别吗?
  • 前端面试总结(at, md)
  • 如何使用 JavaScript 解析 URL
  • 微信开源mars源码分析1—上层samples分析
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 用 Swift 编写面向协议的视图
  • 与 ConTeXt MkIV 官方文档的接驳
  • 在Docker Swarm上部署Apache Storm:第1部分
  • ​io --- 处理流的核心工具​
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​TypeScript都不会用,也敢说会前端?
  • !!java web学习笔记(一到五)
  • #define,static,const,三种常量的区别
  • (a /b)*c的值
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (编译到47%失败)to be deleted
  • (第二周)效能测试
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (三)mysql_MYSQL(三)
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)3D模板阴影原理
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .NET/C# 使用反射注册事件
  • .Net的DataSet直接与SQL2005交互
  • .NET命令行(CLI)常用命令