mybatis启动报错Result Maps collection already contains value for xxx

背景:

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内存在相同的命名,导致报错。

 

 

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值