背景:

mybatis配置xml启动的时候报错,提示Result Maps collection already contains value for xxx。

原因分析:

同一个xml文件里写的sql id具有重名的情况,如下存在俩个id为select的命名就不行,解决办法就是修改其中一个命名。

	<sql id="select">
		select * from student
	</sql>

    <sql id="select">
		select * from student
	</sql>

但是改完以后,发现问题不是这么简单,继续深究

这么简单的问题题主肯定不会犯了,当你找遍了所有的xml,发现根本没有重复命名的情况。

那么启动还是报这个错,怎么处理?

1.首先明确问题原因,报错肯定是因为同一个namespace命名的xml,存在相同sql id的情况

解决办法:

(1)对于同一个接口,使用多个xml对应的情况,要保证同一个namespace命名的xml内,不能存在重复sql id的情况。

(2)第二种就是隐藏比较深的情况,可能是打包导致的问题,排查是否打包后classes中存在多个相同的xml文件

复现(2)的场景

1.多模块工程,模块 分为a、b、c

2.在a模块里面写的a-mapper.xml文件,然后使用classpath*:mapper/*.xml,扫描文件

补一下这个命令的原理

classpath:只会到你的class路径中查找找文件;
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找

3.然后maven打包(一般是maven-shade-plugin插件打包)后c模块里面也包含了a-mapper.xml这个文件

4.所以两个jar都被扫描到xml了,并且同一个namespace命名的xml内存在相同的命名,导致报错。

 

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐