注意环境是idea + maven
最近学习MyBatis框架的基本原理,在测试代码时出现以下错误:
Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException:
### Error building SqlSession.
### The error may exist in com/XXX/dao/IUserDao.xml
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/XXX/dao/IUserDao.xml
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:64)
at com.XXX.test.MybatisTest.main(MybatisTest.java:29)
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/XXX/dao/IUserDao.xml
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:121)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:99)
at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:78)
... 2 more
Caused by: java.io.IOException: Could not find resource com/XXX/dao/IUserDao.xml
at org.apache.ibatis.io.Resources.getResourceAsStream(Resources.java:114)
at org.apache.ibatis.io.Resources.getResourceAsStream(Resources.java:100)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.mapperElement(XMLConfigBuilder.java:371)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:119)
... 4 more
于是在网上查找了许多相关资料。
注意环境是idea + maven
大致原因分为以下几点:
-
xml文件放在src下的java目录中而不是resources文件夹中,idea默认编译resources下的导致找不到文件。类似下面:
这种情况的解决方案已经有博主详细解答了,传送门mybatis错误——java.io.IOException: Could not find resource com/xxx/xxxMapper.xml -
目录分级错误,注意是多级目录:com/mybatis/IUserDao.xml而不是一级目录:com.mybatis.IUserDao.xml,如果是第二种会出现下面这种情况,
这样就只是一级目录而不是多级目录,这是idea默认的。解决方案:创建时应先创建con文件夹在创建mybatis文件夹以保证多级目录。
-
目录名称或者文件名称写错了(我自己犯的就是这种错误),下面是错误示例
解决方案:修改掉错误的地方就可以了。