mybatis绑定多个mapper,@ResultMap 报错: Mapped Statements collection already contains value for xxx - On the way ..... - CSDN博客

mybatis绑定多个mapper,@ResultMap 报错: Mapped Statements collection already contains value for xxx

最近遇到一个奇葩的问题,主要是之前没遇到过。
检查了 id,没有重复的,检查了parameterMap等常规错误,没发现问题。

大概是这样的,项目中用了 mybatis的自动生成代码插件,
于是生成了类似 Activity.java、ActivityMapper.java、ActivityMapper.xml 的这三种文件。
为了方便替换生成的文件,自动生成的ActivityMapper.xml就尽量不改动,我们自己写的sql就放在命名为 ActivityExtMapper.xml中, 当然xml里面的namespace要和ActivitiMapper.xml保持一致。 于是,一个ActivityMapper.java就对应了两个 xml文件。xxx.xml.auto.generate 目录放的自动生成的xml, xxx.xml就是自己写的xml,如图:
这里写图片描述

于是,在配置文件中,扫描xml的路径为:

这里写图片描述

  • 突然,问题出现了!
    因为项目是多人写的,所以我们的sql有用注解的,有用xml的。比如,其中有个sql就用的注解,如图:
    这里写图片描述

    我觉得这个问题奇葩的地方是,这个sql最近没改过,而且之前一直运行好好的,突然昨天在我的电脑和另外个同事的电脑上运行的时候,就会报错:Mapped Statements collection already contains value for xxx.getProductInvestOrders; 但是在其他同事的电脑中运行又没问题!

    后来才发现,是因为有多个mapper.xml, 执行sql时是随机找了一个xml来绑定ResultMap,可能会绑定到自动生成的xxMapper.xml中的BaseResultMap。而这个sql的ResultMap的ID是自己写的定义在 xxxExtMapper.xml中的,所以执行sql的时候,就会报错,意思是已经为这个sql绑定了一个ResultMap了,不要重复绑定。
    问题找到了,就是要指定加载xml的顺序。如图:
    这里写图片描述

    然后就没问题了。总结下来,还是对mybatis的掌握不够深入。注解用得也比较少。
    记个笔记,方便以后看。


Original url: Access
Created at: 2019-03-01 15:34:53
Category: default
Tags: none

请先后发表评论
  • 最新评论
  • 总共0条评论