在使用MyBatis Generator生成代码的过程中,曾经遇到一个坑,每次生成mapper.xml的时候并不是直接覆盖原文件,而是在原文件中追加了新的内容,导致运行项目出错,本文主要讲解如何解决这个问题。

问题重现

示例代码

使用的是mall-tiny-02的代码,代码地址:https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-02

直接运行MallTinyApplication的main函数

发现正常运行,启动成功!图片

运行代码生成器

运行com.macro.mall.tiny.mbg.Generator的main方法

重新启动MallTinyApplication的main函数

发现已经无法正常运行,其中有这么一行关键性的错误:

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重复定义。

查看PmsBrandMapper.xml文件

从中可以发现MyBatis Generator生成的mapper.xml文件信息是直接追加在原来的文件上的,并不是直接覆盖,导致了这个错误。图片

问题解决

以前一直以为是MyBatis Generator生成的问题,直接删除mapper.xml所在文件夹,重新生成就好了,现在提供一种MyBatis Generator官方提供的解决方法。

升级MyBatis Generator的版本

MyBatis Generator 在1.3.7版本提供了解决方案,我们目前使用的版本为1.3.3。

<!-- MyBatis 生成器 --><dependency>    <groupId>org.mybatis.generator</groupId>    <artifactId>mybatis-generator-core</artifactId>    <version>1.3.7</version></dependency>

在generatorConfig.xml文件中添加覆盖mapper.xml的插件

<!--生成mapper.xml时覆盖原文件--><plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />

重新运行代码生成器

发现PmsBrandMapper.xml生成已经正常,应用也可以正常运行了。图片

图片


更多相关文章

  1. 微软Edge浏览器准备内置屏蔽广告功能
  2. 微软分析Pypi数据: 5月21日Python3战胜Python2
  3. mall整合OSS实现文件上传
  4. [简讯] 微软Linux子系统已经支持中文
  5. 图解 Class 文件结构
  6. Class 文件的结构
  7. MyBatis之Mapper XML 文件详解(二)-sql和入参
  8. MyBatis之Mapper XML 文件详解(三)-Result Maps
  9. MyBatis之Mapper XML 文件详解(一)

随机推荐

  1. android 操作sqlite数据库
  2. RelativeLayout 用法以及举例
  3. [Android官方API阅读]___
  4. 在 Android(安卓)上使用协程(二):Getting st
  5. android viewTree and decorView
  6. Android之SharedPreferences用法
  7. Android RelativeLayout的一些常用属性的
  8. Android(安卓)自定义PopupWindow以及参数
  9. ListView透明背景点击设置
  10. 多点触控测试代码 PointerLocation