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 排错的一个参考流程:

  • 相关阅读:
    关于eclipse 的 web.xml文件 There is '1' error in 'j2ee_1_4.xsd'. 错误
    C#实现Java的AES加密解密算法
    jsp页面报错javax.servlet.jsp.jspException cannot be resolved to a type
    Ubuntu下查看jdk安装路径
    【Mysql】启动mysql报错mysqld_safe error: log-error set to /var/log/mariadb/mariadb.log
    spring mvc导出csv案例
    MyBatis 调用存储过程(详解)
    mysql 无限递归出现 data too long for column 'xxx' 错误
    java的maven项目头上有红叉解决方法
    Nexus3搭建Docker等私服
  • 原文地址:https://www.cnblogs.com/csyh/p/13303777.html
Copyright © 2011-2022 走看看