初识MyBatis运行报错问题 | 小册免费学

519 阅读3分钟

大家好,继Spring Framework学习之后,又入手了一本《玩转 MyBatis:深度解析与定制 》,此篇文章就是基于这本小册里的运行配置遇到的问题展开的。因此,在看的时候如果略有点摸不清头脑,很大可能就是没有场景!

PS:这里不是为小册宣传哈,但是问题还是可以参考参考的。

背景

笔者跟着小册的“基础回顾-概述与环境搭建”进行项目构建,跟着作者的步骤来到了最后一步,配置好了pom.xmllog4j.propertiesmapper.xml以及创建了Department.java作为从MySQL中查询出的记录需要装包的类。

然后点击运行,很遗憾,没能一次顺顺利利地成功/(ㄒoㄒ)/~~ 但是咱们不灰心,看看到底是什么成为了成功运行的拦路虎。

报错信息如下:

Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: 
### Error building SqlSession.
### The error may exist in mapper/department.xml
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource mapper/department.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 app.MyBatisApplication1.main(MyBatisApplication1.java:15)
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource mapper/department.xml
	at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:122)
	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 mapper/department.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:374)
	at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:120)
	... 4 more

Process finished with exit code 1

报错信息很长,但你仔细瞧瞧,是啥问题呢?

解决方案

仔细阅读下报错信息,有个熟悉的影子:

Cause: java.io.IOException:

Could not find resource mapper/department.xml

看到这,不禁摸摸自己的脑袋,哎不对啊,我都是按照作者写的,咋说找不到呢?没办法,既然说了找不到,那我就人为找下,看是不是真没有这个文件。好哇,还真没有!

目录截图.png

人都傻了,难道是我看错了??事实证明,是作者写错了,把文件命名为mapper.xml。而没有用心学的“我”,没意识到,就直接跟着写了。

既然发现问题,那就更正它,按shift+F6,给它重命名为department.xml后,再运行一次。

结果还是报错了。那这次又是什么问题呢?

Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.linkedbear.mybatis.entity.Department'.  Cause: java.lang.ClassNotFoundException: Cannot find class: com.linkedbear.mybatis.entity.Department

报错信息过长,就截出问题所在给大家看看。

报错信息表示,没找到要装包的类啊,你咋肥事,怎么老丢三落四的!其实解决方案也很简单,因为作者的package和自己创建的很多时候是不一样的,所以在运行的时候,在作者电脑上跑的代码是ok的,到你这就error了,很大概率就是包不同!

根据错误信息定位如下,把包名去掉即可,即改为entity.Department

classNotFound.png

再点击运行,结果就出来了。(当然出来的还是和小册里的不一样,自己重写toString函数即可哈)。

总结

其实整个排查的过程还是很简单的,就是把找不到的文件或者类给纠正过来,但笔者还是写了这篇文章。对于初学者来说,接触一个全新的领域(笔者之前用过MyBatis,但是代码都是用MyBatis Generator插件生成的),难免会在遇到困难的时候慌张,看都没看就把报错信息复制粘贴到网上找答案,甚至直接放弃学习了。

但现在回顾下刚刚整个过程,其实学习就是在遇到问题,阅读报错信息,然后定位信息,并尝试解决问题中成长的,笔者也是慢慢在打破自己的胆怯,直面问题去成长,也希望能够通过这篇文章给予像笔者一样的初学者信心继续坚持下去!

最后,能否在评论区分享下你的经验或者经历呢?

本文正在参与「掘金小册免费学啦!」活动, 点击查看活动详情