在使用MyBatis Generator生成代碼的過程當中,曾經遇到一個坑,每次生成mapper.xml的時候並非直接覆蓋原文件,而是在原文件中追加了新的內容,致使運行項目出錯,本文主要講解如何解決這個問題。java
使用的是mall-tiny-02的代碼,代碼地址:github.com/macrozheng/…git
發現正常運行,啓動成功! github
運行com.macro.mall.tiny.mbg.Generator的main方法apache
發現已經沒法正常運行,其中有這麼一行關鍵性的錯誤:mybatis
nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML.
The XML location is 'file [D:\developer\github\mall-learning\mall-tiny-02\target\classes\com\macro\mall\tiny\mbg\mapper\PmsBrandMapper.xml]'.
Cause: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.macro.mall.tiny.mbg.mapper.PmsBrandMapper.BaseResultMap
複製代碼
代表了PmsBrandMapper.xml文件解析錯誤,BaseResultMap重複定義。app
從中能夠發現MyBatis Generator生成的mapper.xml文件信息是直接追加在原來的文件上的,並非直接覆蓋,致使了這個錯誤。 函數
之前一直覺得是MyBatis Generator生成的問題,直接刪除mapper.xml所在文件夾,從新生成就行了,如今提供一種MyBatis Generator官方提供的解決方法。學習
MyBatis Generator 在1.3.7版本提供瞭解決方案,咱們目前使用的版本爲1.3.3。ui
<!-- MyBatis 生成器 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
複製代碼
<!--生成mapper.xml時覆蓋原文件-->
<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />
複製代碼
發現PmsBrandMapper.xml生成已經正常,應用也能夠正常運行了。 spa
mall項目全套學習教程連載中,關注公衆號第一時間獲取。