SpringBoot整合Mybatis报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

问题描述:

在SpringBoot整合Mybatis的环境下执行SQL时报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

application.yml文件

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3307/flying_ping?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
    username: root
    password: root
  web:
    resources:
      static-locations: classpath:static

mybatis:
  mapper-locations: com/test/mapper/*.xml
  type-aliases-package: com.test.pojo
  configuration:
    map-underscore-to-camel-case: true

看起来也没错,难道这些映射文件压根就没有编译进去吗?所以我跑到classpath目录去看了一下
SpringBoot整合Mybatis报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)_第1张图片果然不出我所料,SpringBoot没有将src/main/java/下的xml文件编译进来。。。


原因分析:

在网上查找资料得知,这并不是SpringBoot的错,而是IDEA的错,误会SpringBoot了呀!!!
IDEA的maven项目中,默认源代码目录下(src/main/java目录)的xml等资源文件并不会在编译的时候一块打包进classes文件夹,而是直接舍弃掉。如果使用的是Eclipse,Eclipse的src目录下的xml等资源文件在编译的时候会自动打包进输出到classes文件夹。


解决方案:

解决方案有多种

  • 第一种:需要在pom.xml中添加如下插件
<build>
     <resources>
          注意这里要给springBoot指定需要打包的静态资源。否则SpringBoot将找不到配置文件
          <resource>
              <directory>src/main/javadirectory>
              <includes>
                  <include>**/*.ymlinclude>
                  <include>**/*.propertiesinclude>
                  <include>**/*.xmlinclude>
              includes>
              <filtering>falsefiltering>
          resource>
          <resource>
              <directory>src/main/resourcesdirectory>
              <includes>
                  <include>**/*.ymlinclude>
                  <include>**/*.propertiesinclude>
                  <include>**/*.xmlinclude>
              includes>
              <filtering>falsefiltering>
          resource>
      resources>
  build>

这种方式在项目实战中还是比较常用且靠谱的

  • 第二种:将mapper.xml文件放在resource目录下

如果没有什么特殊场景,也就是你仅仅只是练习就将mapper.xml放在resources包下。因为MAVE默认在编译的时候会将resources包下的文件也编译到classpath下
如图
SpringBoot整合Mybatis报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)_第2张图片同时将properties文件或yml文件中的配置改为

mybatis.mapper-locations=classpath:mapper/*.xml

你可能感兴趣的:(异常,spring,boot)