项目启动的时候报Result Maps collection a
2020-03-05 本文已影响0人
炎族族长炎天帝
在一个项目中使用MyBatis Generator来生成Dao层的文件会显著的提高开发效率,但这极度封装的背后,如果一点都不了解其操作会导致一些难以预见的问题,比如~
首先项目采用的Maven,集成MyBatis Generator的pom文件相关部分如下:
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.2</version>
<configuration>
<configurationFile>src/main/resources/generatorConfig-spu.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.28</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
看起来没什么问题,线上服务采用的Jenkins自动化构建部署,很方便,但是启动的时候一直报错,报错如下:
Result Maps collection already contains value for com.bj58.zhuanzhuan.zzspusamplejob.dao.mappers.SkuInfoSrcMapper.BaseResultMap
错误简单明了,就是ResultMap冲突,于是很自信的找到xml文件进行排查,如下图:

首先,我知道MyBatis Generator在重复生成文件的时候,不会覆盖xml文件,而是会合并(Merge),这会导致id的冲突,于是我直接删了xml文件自动生成,再次部署,又一次出现这样的问题。
于是检查项目的xml文件,确认并没有重复的ID,但每次部署的时候都会报错,最后查询了MyBatis Generator的官方文档,看到如下解释官方文档:

大概意思就是说如果在pom文件找那个加上了<goal>generate</goal>,那么在maven compile步骤前会执行生成,而正好我们的项目是通过maven构建的,因此每次构建的时候自动生成都会merge xml,导致ID重复,至此问题很明确了,把pom文件中自动生成的配置删了即可。