mybatis mybatis-plus resultMap 实现多表联查,主副表 Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\his\houduan\emr-admin\emr-record\emr-record-biz\target\classes\mapper\EmrPartogramMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\his\houduan\emr-admin\emr-record\emr-record-biz\target\classes\mapper\EmrPartogramMapper.xml]'. Cause: java.lang.ClassCastException: com.baomidou.mybatisplus.core.MybatisConfiguration$StrictMap$Ambiguity cannot be cast to org.apache.ibatis.mapping.ResultMap at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.3.15.jar:5.3.15] at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.15.jar:5.3.15] ... 44 common frames omitted Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [D:\his\houduan\emr-admin\emr-record\emr-record-biz\target\classes\mapper\EmrPartogramMapper.xml]'; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\his\houduan\emr-admin\emr-record\emr-record-biz\target\classes\mapper\EmrPartogramMapper.xml]'. Cause: java.lang.ClassCastException: com.baomidou.mybatisplus.core.MybatisConfiguration$StrictMap$Ambiguity cannot be cast to org.apache.ibatis.mapping.ResultMap at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.buildSqlSessionFactory(MybatisSqlSessionFactoryBean.java:595) ~[mybatis-plus-extension-3.4.3.1.jar:3.4.3.1] at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.afterPropertiesSet(MybatisSqlSessionFactoryBean.java:431) ~[mybatis-plus-extension-3.4.3.1.jar:3.4.3.1] at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.getObject(MybatisSqlSessionFactoryBean.java:628) ~[mybatis-plus-extension-3.4.3.1.jar:3.4.3.1] at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration.sqlSessionFactory(MybatisPlusAutoConfiguration.java:219) ~[mybatis-plus-boot-starter-3.4.3.1.jar:3.4.3.1] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_91] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_91] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_91] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_91] at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.3.15.jar:5.3.15] ... 45 common frames omitted Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'file [D:\his\houduan\emr-admin\emr-record\emr-record-biz\target\classes\mapper\EmrPartogramMapper.xml]'. Cause: java.lang.ClassCastException: com.baomidou.mybatisplus.core.MybatisConfiguration$StrictMap$Ambiguity cannot be cast to org.apache.ibatis.mapping.ResultMap at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:123) ~[mybatis-3.5.7.jar:3.5.7] at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:95) ~[mybatis-3.5.7.jar:3.5.7] at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.buildSqlSessionFactory(MybatisSqlSessionFactoryBean.java:593) ~[mybatis-plus-extension-3.4.3.1.jar:3.4.3.1] ... 53 common frames omitted Caused by: java.lang.ClassCastException: com.baomidou.mybatisplus.core.MybatisConfiguration$StrictMap$Ambiguity cannot be cast to org.apache.ibatis.mapping.ResultMap at com.baomidou.mybatisplus.core.MybatisConfiguration.checkGloballyForDiscriminatedNestedResultMaps(MybatisConfiguration.java:318) ~[mybatis-plus-core-3.4.3.1.jar:3.4.3.1] at com.baomidou.mybatisplus.core.MybatisConfiguration.addResultMap(MybatisConfiguration.java:222) ~[mybatis-plus-core-3.4.3.1.jar:3.4.3.1] at org.apache.ibatis.builder.MapperBuilderAssistant.addResultMap(MapperBuilderAssistant.java:209) ~[mybatis-3.5.7.jar:3.5.7] at org.apache.ibatis.builder.ResultMapResolver.resolve(ResultMapResolver.java:47) ~[mybatis-3.5.7.jar:3.5.7] at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:289) ~[mybatis-3.5.7.jar:3.5.7] at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:254) ~[mybatis-3.5.7.jar:3.5.7] at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElements(XMLMapperBuilder.java:246) ~[mybatis-3.5.7.jar:3.5.7] at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:119) ~[mybatis-3.5.7.jar:3.5.7] ... 55 common frames omitted 字段许多相同字段
时间: 2025-09-10 18:05:36 AIGC 浏览: 21
当MyBatis和MyBatis - Plus使用resultMap进行多表联查时出现`ClassCastException: com.baomidou.mybatisplus.core.MybatisConfiguration$StrictMap$Ambiguity cannot be cast to org.apache.ibatis.mapping.ResultMap`错误,这是一个类型转换异常,意味着一个`MybatisConfiguration$StrictMap$Ambiguity`类型的对象无法转换为`ResultMap`对象[^1]。以下是可能的解决办法:
### 检查resultMap的配置
确保在MyBatis的XML文件中,`resultMap`的配置正确。检查`id`是否唯一,映射的列和属性是否匹配。例如:
```xml
<resultMap id="UserResultMap" type="com.example.entity.User">
<id property="id" column="user_id"/>
<result property="name" column="user_name"/>
<!-- 其他映射 -->
</resultMap>
```
### 检查SQL语句
确保SQL语句中的列名和`resultMap`中配置的列名一致。如果列名不一致,MyBatis可能无法正确映射结果,从而导致类型转换异常。例如:
```xml
<select id="getUserWithOrders" resultMap="UserResultMap">
SELECT u.id as user_id, u.name as user_name, o.order_id, o.order_name
FROM users u
JOIN orders o ON u.id = o.user_id
</select>
```
### 检查MyBatis - Plus的版本兼容性
确保MyBatis和MyBatis - Plus的版本兼容。不兼容的版本可能会导致一些内部类的使用出现问题。可以尝试升级或降级MyBatis - Plus到一个稳定的版本。
### 检查代码中的调用
确保在代码中正确调用了`resultMap`。例如,在Mapper接口中:
```java
public interface UserMapper {
List<User> getUserWithOrders();
}
```
### 检查是否有重复的resultMap定义
如果在多个地方定义了相同`id`的`resultMap`,可能会导致`StrictMap`中的歧义,从而出现`Ambiguity`对象。确保`resultMap`的`id`在整个项目中是唯一的。
### 清理缓存
有时候,MyBatis的缓存可能会导致一些问题。可以尝试清理MyBatis的缓存,或者在开发环境中禁用缓存。例如,在MyBatis的配置文件中:
```xml
<settings>
<setting name="cacheEnabled" value="false"/>
</settings>
```
### 检查依赖冲突
检查项目中的依赖是否存在冲突。可以使用Maven或Gradle的依赖分析工具来查看是否有重复或不兼容的依赖。
### 参考文档和社区
查阅MyBatis和MyBatis - Plus的官方文档,或者在相关的社区(如Stack Overflow、GitHub)上搜索类似的问题,可能会找到更多的解决方案。
阅读全文
相关推荐



















