zoukankan      html  css  js  c++  java
  • Mybatis 异常 IOException: Could not find resource 或 BindingException: Invalid bound statement (not found)

    场景

    ​ 使用 MyBatis 配置持久层,出现如下异常:

    第一个异常是在 mybatisConfig.xml 中配置 Mapper.xml 时,用 resource 指定映射 xml 文件所提示的异常(以排除文件名错误);

    第二个异常是 resource 方式指定映射文件无果后,尝试用指定接口的方式,指定成功了,但是调用方法时出现的异常

    分析

    ​ 从两种异常中可以分析出,我们的 Mapper.xml 文件压根没有生效,先是找不到,再所是配制 sql 执行不了。

    ​ 原来 Maven(又或是IDEA)中默认配置文件只存在 resource 中,顾只扫描 resource 中的资源(以前明明记了,看到来要多踩踩坑才能长记性啊),所以解决方法呼之欲出了!

    解决

    两种方式:

    1. Mapper.xml 位于 dao 接口同包下,不会被扫描到(Maven 将目录标记为代码目录了,也理所当然),所以我们可以进行配置,让对 Maven 的扫描不排除 *.xml 文件,这样就可以找到我们的映射文件了。做法就是在 Maven 工程的 pom.xml 文件添加如下配置:

      <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>**/*.properties</include>
                   <include>**/*.xml</include>
               </includes>
               <filtering>false</filtering>
           </resource>
       </resources>
      </build>
      

      这样,位于 dao 包下的 xml 文件也能被扫描到了,问题解决!

    2. 第二种方式是将 Mapper.xml 映射文件与接口的命名相同,如:dao 接口为 IUserDAO,映射文件就为:IUserDao.xml。问题同样可以解决。这里应该是 MyBatis 的自动映射,具体叫什么忘了...

    补充:

    ​ 收集的一个 MyBatis 排错的一个参考流程:

  • 相关阅读:
    BEC listen and translation exercise 44
    中译英12
    BEC listen and translation exercise 43
    中译英11
    BEC listen and translation exercise 42
    中译英10
    BEC listen and translation exercise 41
    中译英9
    BEC listen and translation exercise 40
    中译英8
  • 原文地址:https://www.cnblogs.com/csyh/p/13303777.html
Copyright © 2011-2022 走看看