springboot注意事项org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

xml和properties文件不包含在target中,想要包括在target则需要在Pom文件
<build>标签中加入下面的配置
<resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.*</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>

<resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.*</include> </includes> <filtering>false</filtering> </resource> </resources>

 

今天搭建springMVC+spring+mybatis maven项目,总是出现

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)错误,调试了好久都没解决问题,新手的心酸也只有新手才能体会了。最后我去target目录下看了下,发现自己写的mapper.xml,原来maven项目的约定配置文件必须放resources里,src目录下的xml文件默认不会编译到target。由于我把mapper.xml放在了src目录里,才导致了错误的发生,该问题的实质是,idea对classpath的规定。在eclipse中,把资源文件放在src文件夹下,是可以找到的;但是在idea中,直接把资源文件放在src文件夹下,如果不进行设置,是不能被找到的。

 

     原来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>

 

问题

在使用idea做springboot开发的时候,遇到Invalid bound statement (not found): com.example.springbootssmtest.mapper.UsersMapper.insertUser,但是mybaits、xml文件语法无误,接口和xml文件的路径对应无误,主程序也使用@MapperScan(“com.example.springbootssmtest.mapper”)对接口进行了扫描在这里插入图片描述。idea提示上述异常,说明接口方法没问题,问题在于xml文件

原因

通过查阅相关资料发现,IDEA对xml文件处理的方式不同,在Eclipse中dao文件与mapper.xml文件只要在同一级目录下即可,但是在IDEA中,mapper.xml要放在resources目录下,且还有一个关键的地方是什么吧?就是resources下不能创建package,只能创建Directory,文件夹下面要想创建文件夹,就不能以(.)的形式,例如com.example.springbootssmtest.mapper,在src目录下可以创建package这样连着写包名,但是在resources下面就不能这样写了,这样写的话,就相当于这个文件夹的名称是“com.example.springbootssmtest.mapper”在这里插入图片描述
,而不是com/example/springbootssmtest/mapper在这里插入图片描述

解决办法1

在resources下一级一级的创建directory,先建com,然后在com下创建example,然后在example下创建。。。
创建完成directory后,在里面添加xml文件便可。

解决办法2

将接口方法和xml文件放到一起,在mapper接口上添加@mapper注解
在这里插入图片描述

主程序添加接口扫描@MapperScan(“com.example.springbootssmtest.mapper”)

解决办法3

直接在resources下创建一个名字为mapper的directory,然后在配置文件里添加mybatis.mapper.locations配置在这里插入图片描述

posted @ 2021-02-02 14:18  bnewky0319  阅读(290)  评论(0编辑  收藏  举报