Mybatis报错——Mapped Statements collection already contains value for 。。。

9 篇文章 0 订阅
9 篇文章 0 订阅

Mybatis报错——Mapped Statements collection already contains value for com.mapper.EmployeeMapperPlus.getEmpByIdDe

异常如下:

org.apache.ibatis.exceptions.PersistenceException: 
### Error building SqlSession.
### The error may exist in com/mapper/EmployeeMapperPlus.xml
### The error occurred while processing mapper_resultMap[MyEmp_disc]_discriminator_case[1]
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. 
Cause: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.mapper.EmployeeMapperPlus.getEmpByIdDe
    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
    at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80)
    ... 31 more

报错分析:
关键是这两句:

Error parsing Mapper XML
意思是:Mapper.xml映射文件解析错误

Cause: java.lang.IllegalArgumentException: Mapped Statements collection already contains value for com.mapper.EmployeeMapperPlus.getEmpByIdDe

意思是:映射声明集合中已经包含方法
com.mapper.EmployeeMapperPlus.getEmpByIdDe

报错原因:
Mapper映射文件中SQL标签的id属性,是与Mapper接口中的方法一一对应的。
上面错误顾名思义就是SQL标签中有 id 重复的标签。故而报出映射声明集合中已经包含某方法(Mapped Statements collection already contains value for )

如下代码,第一个标签与第三个标签id相同就会报这个异常。

<mapper namespace="com.mapper.EmployeeMapperPlus">
    <select id="getEmpByIdDe" resultMap="MySinpleEmp">
        select * from tbl_employee where id = #{id}
    </select>

    <select id="getEmpByIdStep" resultMap="MyEmpByStep">
        select * from tbl_employee where id = #{id}
    </select>
    <select id="getEmpByIdDe" resultMap="MyEmp_disc">
        select * from tbl_employee where id = #{id}
    </select>
</mapper>

错误解决:
查找根据报错提示的映射文件名和方法名,查找是否有id属性重复的SQL标签。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值