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 中的资源(以前明明记了,看到来要多踩踩坑才能长记性啊),所以解决方法呼之欲出了!
解决#
两种方式:
-
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 文件也能被扫描到了,问题解决!
-
第二种方式是将 Mapper.xml 映射文件与接口的命名相同,如:dao 接口为 IUserDAO,映射文件就为:IUserDao.xml。问题同样可以解决。这里应该是 MyBatis 的自动映射,具体叫什么忘了...
补充:#
作者: "无问西东"
出处:https://www.cnblogs.com/csyh/p/13303777.html
版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析