是在执行多个单元测试时遇到的,当时觉得很震惊,直接点idea运行单个不会报错,运行多个单元测试就会报错,一度怀疑我的idea出问题了。

    1. 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'
    2. at org.apache.ibatis.builder.MapperBuilderAssistant.getStatementResultMaps(MapperBuilderAssistant.java:341) ~[mybatis-3.5.4.jar:3.5.4]
    3. at org.apache.ibatis.builder.MapperBuilderAssistant.addMappedStatement(MapperBuilderAssistant.java:285) ~[mybatis-3.5.4.jar:3.5.4]
    4. at com.baomidou.mybatisplus.core.injector.AbstractMethod.addMappedStatement(AbstractMethod.java:331) ~[mybatis-plus-core-3.3.2.jar:3.3.2]
    5. at com.baomidou.mybatisplus.core.injector.AbstractMethod.addSelectMappedStatementForTable(AbstractMethod.java:270) ~[mybatis-plus-core-3.3.2.jar:3.3.2]
    6. at com.baomidou.mybatisplus.core.injector.methods.SelectById.injectMappedStatement(SelectById.java:40) ~[mybatis-plus-core-3.3.2.jar:3.3.2]
    7. at com.baomidou.mybatisplus.core.injector.AbstractMethod.inject(AbstractMethod.java:63) ~[mybatis-plus-core-3.3.2.jar:3.3.2]
    8. at com.baomidou.mybatisplus.core.injector.AbstractSqlInjector.lambda$inspectInject$0(AbstractSqlInjector.java:55) ~[mybatis-plus-core-3.3.2.jar:3.3.2]
    9. at java.util.ArrayList.forEach(ArrayList.java:1257) ~[na:1.8.0_201]
    10. at com.baomidou.mybatisplus.core.injector.AbstractSqlInjector.inspectInject(AbstractSqlInjector.java:55) ~[mybatis-plus-core-3.3.2.jar:3.3.2]
    11. at com.baomidou.mybatisplus.core.MybatisMapperAnnotationBuilder.parse(MybatisMapperAnnotationBuilder.java:122) ~[mybatis-plus-core-3.3.2.jar:3.3.2]
    12. at com.baomidou.mybatisplus.core.MybatisMapperRegistry.addMapper(MybatisMapperRegistry.java:82) ~[mybatis-plus-core-3.3.2.jar:3.3.2]
    13. at com.baomidou.mybatisplus.core.MybatisConfiguration.addMapper(MybatisConfiguration.java:103) ~[mybatis-plus-core-3.3.2.jar:3.3.2]
    14. at org.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig(MapperFactoryBean.java:80) ~[mybatis-spring-2.0.4.jar:2.0.4]
    15. ... 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解决了这个问题。

    1. <dependency>
    2. <groupId>com.baomidou</groupId>
    3. <artifactId>mybatis-plus-boot-starter</artifactId>
    4. <version>3.4.0</version>
    5. </dependency>