Java--Cannot instantiate object of type org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin

迈不过友情╰ 2023-10-05 15:35 102阅读 0赞

报错如下:

  1. Exception in thread "main" java.lang.RuntimeException: Cannot instantiate object of type org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin
  2. at org.mybatis.generator.internal.ObjectFactory.createInternalObject(ObjectFactory.java:215)
  3. at org.mybatis.generator.internal.ObjectFactory.createPlugin(ObjectFactory.java:270)
  4. at org.mybatis.generator.config.Context.generateFiles(Context.java:691)
  5. at org.mybatis.generator.api.MyBatisGenerator.generate(MyBatisGenerator.java:266)
  6. at org.mybatis.generator.api.MyBatisGenerator.generate(MyBatisGenerator.java:138)
  7. at com.macro.mall.tiny.mbg.Generator.main(Generator.java:31)
  8. Caused by: java.lang.ClassNotFoundException: org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin
  9. at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
  10. at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
  11. at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
  12. at java.base/java.lang.Class.forName0(Native Method)
  13. at java.base/java.lang.Class.forName(Class.java:427)
  14. at org.mybatis.generator.internal.ObjectFactory.internalClassForName(ObjectFactory.java:167)
  15. at org.mybatis.generator.internal.ObjectFactory.createInternalObject(ObjectFactory.java:211)
  16. ... 5 more

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01pbmdnZVFpbmdjaHVu_size_16_color_FFFFFF_t_70

MyBatis Generator使用过程中踩过的一个坑

SpringBoot实战电商项目mall(20k+star)地址:https://github.com/macrozheng/mall

摘要

在使用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函数

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

  1. nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML.
  2. The XML location is 'file [D:\developer\github\mall-learning\mall-tiny-02\target\classes\com\macro\mall\tiny\mbg\mapper\PmsBrandMapper.xml]'.
  3. 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。

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

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

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

重新运行代码生成器

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

展示图片

项目源码地址

https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-02

关于作者

macrozheng 【id:macrozheng】
专注Java技术分享,mall项目全套学习教程连载中,作者Github项目mall(20k+star)

原文链接https://www.imooc.com/article/292348?block_id=tuijian_wz

发表评论

表情:
评论列表 (有 0 条评论,102人围观)

还没有评论,来说两句吧...

相关阅读