org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)异常问题解决汇总

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/liuchuanhong1/article/details/79525856

最近在使用Mybatis的过程中,遇到了这个异常,通过

http://ljhzzyx.blog.163.com/blog/static/38380312201412453629988/

这个博客里面的方法还是没有解决问题,为了方便大家看,遂将该博客中的解决方法复制过来了。最后还是将遇到的问题解决了,方法见最后的总结:

很多原因都会导致Mybatis中出现这个异常,一般的解决方法如下:

一般的原因是Mapper interface和xml文件的定义对应不上,需要检查包名,namespace,函数名称等能否对应上,需要比较细致的对比,我经常就是写错了一两个字母搞的很长时间找不到错误

按以下步骤一一执行:
1:检查xml文件所在的package名称是否和interface对应的package名称一一对应
2:检查xml文件的namespace是否和xml文件的package名称一一对应
3:检查函数名称能否对应上
4:去掉xml文件中的中文注释

5:随意在xml文件中加一个空格或者空行然后保存

一般来说到此就可以排除错误了。
      以上步骤除第5步,其他步骤没什么问题。第5步看起来这么怪异的解决方式,实际上是触发了ide的自动编译功能。由于xml文件在编译的时候,不一定总能立即从源目录复制到class文件的编译目录(MyEclipse经常出这个问题),有时候你源目录中的xml文件已经修改好了,而class所在的目录里面还是旧的。因此真正确定有效的方式是将正确的xml文件复制到class输出目录。
      还有种情况会出这个错误,比如配置xml映射文件需要满足特定要求
    
如上只有Mapper结尾的xml文件才会被Mybatis扫描到,这个时候如果忘记了这个规则,xml使用了其他名称,如xxxDao.xml。这样xml的配置就不会加入到Mybatis存储配置的一个map对象里去,也会出现 Invalid bound statement 的错误。解决方法就是把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>

================================华丽的分割线===============================

在一一试过上面的方法后,我的问题还是没有解决,最终通过看解压后的jar文件发现,mapper.xml文件根本就没有打包到jar里面去,因为我的工程结构有点不一样,是将mapper.java和mapper.xml放到一个目录下的,而使用maven打包的时候,默认是只打java文件的,所以在pom文件中加上就ok了,方法如下:

<build>
    <finalName>test</finalName>
    <!--
    这样也可以把所有的xml文件,打包到相应位置。
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
                <include>**/*.tld</include>
            </includes>
            <filtering>false</filtering><--这里是false,用true会报 数据库连接 错误-->
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
                <include>**/*.tld</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
</build>
问题解决了!希望对大家有帮助。



猜你喜欢

转载自blog.csdn.net/liuchuanhong1/article/details/79525856