是在执行多个单元测试时遇到的,当时觉得很震惊,直接点idea运行单个不会报错,运行多个单元测试就会报错,一度怀疑我的idea出问题了。
Caused by: org.apache.ibatis.builder.IncompleteElementException: Could not find result map 'com.baomidou.mybatisplus.samples.quickstart.mapper.UserMapper.mybatis-plus_User' referenced from 'com.baomidou.mybatisplus.samples.quickstart.mapper.UserMapper.selectById'
at org.apache.ibatis.builder.MapperBuilderAssistant.getStatementResultMaps(MapperBuilderAssistant.java:341) ~[mybatis-3.5.4.jar:3.5.4]
at org.apache.ibatis.builder.MapperBuilderAssistant.addMappedStatement(MapperBuilderAssistant.java:285) ~[mybatis-3.5.4.jar:3.5.4]
at com.baomidou.mybatisplus.core.injector.AbstractMethod.addMappedStatement(AbstractMethod.java:331) ~[mybatis-plus-core-3.3.2.jar:3.3.2]
at com.baomidou.mybatisplus.core.injector.AbstractMethod.addSelectMappedStatementForTable(AbstractMethod.java:270) ~[mybatis-plus-core-3.3.2.jar:3.3.2]
at com.baomidou.mybatisplus.core.injector.methods.SelectById.injectMappedStatement(SelectById.java:40) ~[mybatis-plus-core-3.3.2.jar:3.3.2]
at com.baomidou.mybatisplus.core.injector.AbstractMethod.inject(AbstractMethod.java:63) ~[mybatis-plus-core-3.3.2.jar:3.3.2]
at com.baomidou.mybatisplus.core.injector.AbstractSqlInjector.lambda$inspectInject$0(AbstractSqlInjector.java:55) ~[mybatis-plus-core-3.3.2.jar:3.3.2]
at java.util.ArrayList.forEach(ArrayList.java:1257) ~[na:1.8.0_201]
at com.baomidou.mybatisplus.core.injector.AbstractSqlInjector.inspectInject(AbstractSqlInjector.java:55) ~[mybatis-plus-core-3.3.2.jar:3.3.2]
at com.baomidou.mybatisplus.core.MybatisMapperAnnotationBuilder.parse(MybatisMapperAnnotationBuilder.java:122) ~[mybatis-plus-core-3.3.2.jar:3.3.2]
at com.baomidou.mybatisplus.core.MybatisMapperRegistry.addMapper(MybatisMapperRegistry.java:82) ~[mybatis-plus-core-3.3.2.jar:3.3.2]
at com.baomidou.mybatisplus.core.MybatisConfiguration.addMapper(MybatisConfiguration.java:103) ~[mybatis-plus-core-3.3.2.jar:3.3.2]
at org.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig(MapperFactoryBean.java:80) ~[mybatis-spring-2.0.4.jar:2.0.4]
... 66 common frames omitted
刚开始也不知道是idea的问题还是spring的问题还是其他问题,
然后发现mvn test 批量测试也会出错,初步排除是idea的问题。
看了启动源码之后,发现是一个mp里面map参数没有初始化的问题,
我感觉是mp的问题,查了半天之后,
最后在mybatis plus的github issue上找了半天终于找到了答案:
这个是在同一个jvm线程执行了两次SpringBootTest,容器初始化了两次,但mp的方法内部内核只使用了一个静态缓存来存储类对应的表信息(包含mybatis的配置对象),第一次执行完成之后,缓存了表相关信息,第二次执行的时候由于缓存了数据,只切换了config,没有重新初始化resultMap,导致了以上问题。
原文地址:https://github.com/baomidou/mybatis-plus/issues/2550
最终升级了mybatis plus的版本到3.4.0解决了这个问题。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>