jdbc.url=jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8&useSSL=false

问题解决

pass: 此处的Mybatis没有使用Spring集成
报错如下:
java.lang.ExceptionInInitializerError
Caused by: org.apache.ibatis.exceptions.PersistenceException:
Error building SqlSession.
The error may exist in com.mapper.StuMapper.xml
Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com.mapper.StuMapper.xml
······
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com.mapper.StuMapper.xml
······
Caused by: java.io.IOException: Could not find resource com.mapper.StuMapper.xml
······
出现这个问题说明mapper.xml没有找到
有两种情况:
-
一、接口与xml文件路径不同
-
二、xml存在问题
经过分析,接口与xml路径相同,情况一排除

此时检查mybatis-config.xml文件的mapper配置

问题出在这里,.是在source包下的包与包的分割,此处寻找的是静态资源resource包下,应该用/分割,所以正确写法如下:

问题解决

0x03 Spring集成Mybaits时JUnit测试问题
使用Spring集成Mybatis之后在单元测试中出现下面问题
java.lang.ExceptionInInitializerError
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
······
Caused by: java.lang.IllegalStateException: SpringJUnit4ClassRunner requires JUnit 4.12 or higher.
at org.springframework.util.Assert.state(Assert.java:73)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.(SpringJUnit4ClassRunner.java:104)
… 15 more
由报错SpringJUnit4ClassRunner requires JUnit 4.12 or higher.可知JUnit版本过低导致,但是我配置JUnit版本是符合要求的。结果依然报错。

经过研究,发现了问题。
我在创建项目时为了方便所以使用了maven 的依赖管理,将需要的依赖都放在了父项目里面,然后子项目去继承父项目的依赖,结构如下:

问题就出在Spring集成Mybatis这个项目中,我在创建这个子项目的时候使用了maven的脚手架webapp 所以他自带了一个JUnit依赖,从而把父项目的JUnit依赖替换掉了。
又正好子项目的依赖版本低于要使用的版本,所以出现问题。

将该依赖注释,刷新pom.xml之后再次运行单元测试。


5391

被折叠的 条评论
为什么被折叠?



