废话不多说。我们首先看两个配置文件的图片(上面是Mybatis配置文件Mybatis-configuration 下面是Spring整合Mybatis的配置文件Spring-Mybatis-configuration)。你们来看看有什么问题
下面是mybatis的配置文件
下面是Spring整合Mybatis的配置文件
这样写有什么后果呢? 当然啦 会报错 但是原因是什么呢?
首先我们在Mybatis里面配置了package 这样Mybatis就会去扫描com.zsy.mapper下面的所有的映射文件 (这是我们的第一次扫描)
之后我们又在配置sqlSessionFactory时又给它指明了映射文件的位置 所以不管怎么 它似乎又去读取了一遍? 这样会报什么错呢?
就是这个 !!!万恶的加载Spring上下文错误的错误:
java.lang.IllegalStateException: Failed to load ApplicationContext
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.mybatis.spring.SqlSessionFactoryBean#0' defined in class path resource [spring.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [C:\Users\张世宇\Desktop\SSMCRUDRESTFUL\target\classes\com\zsy\mapper\DeptMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.zsy.mapper.DeptMapper.BaseResultMap
就这个东西 我甚至调试了五个小时! 结果 就是因为这里的两个配置段写重复了!!!上网百度对于这个异常的相关的解决方法 原来就是因为这个!! 上面异常说的是结果映射集已经包含了对应的xml映射文件
希望能够帮助到大家解决对于 ApplicationContext异常的处理 真的坑!!!!!
补充一下!!十分重要(如果你是IDEA MAVEN项目 并且 你在Mybatis里面<mappers>标签使用package来扫描Mybatis相关的Dao层接口的xml映射文件 那么你必须把对应的xml映射文件和接口类放在同一个包下!!! 那么既然你把xml放在了包里面 你说 IDEA会为把你的xml放在classes里面么 当然不会 因为IDEA MAVEN项目只把.java文件打包到classes文件夹里面 因此你必须在pom.xml文件中加入下面的配置 (放在build标签里面))
<resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <!--默认是true--> <!--<filtering>true</filtering>--> </resource> </resources>
这样 他就会把你的xml映射文件也放在classes文件夹里面 这样你才能够访问和使用这些映射文件........
SSM整合搭建真的是新人杀手!!!!!/(ㄒoㄒ)/~~