Mapped Statements collection already contains value

本文探讨了在使用MyBatis进行多表查询时遇到的字段名与实体类属性名不一致的问题,并提供了三种解决方案:字段别名、全局配置自动映射和设置resultMap。特别强调了resultMap配置中ID唯一性的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    今天来分享一下让人让我有点抓脑的问题!!  

   这一阵子都在自学Mybatis,昨天学的多表查询,多对一的关系查询中出现了一个报错,其实也是很简单的问题,但稍不注意就会让人抓耳挠腮。

  在数据库的字段名中有些事下划线命名,而对应的实体类一般会是驼峰命名,解决字段名和属性名不一致的方法有三种:

a->:为字段起别名

b->:

设置全局变量,将自动映射为驼峰 <setting name="mapUnderscoreToCamelCase" value="true"/>

c->:

设置resultMap

<resultMap id="empResultMap" type="Emp">

    <id property="eid" column="eid"></id>
    <result property="empName" column="emp_name"></result>
    <result property="age" column="age"></result>
    <result property="sex" column="sex"></result>
    <result property="email" column="email"></result>
</resultMap>
这里要注意的是:在mpMApper.xml写查询sql语句时,同一个方法的resultMap的值不能写多个,否则会出现
   Mapped Statements collection already contains value

而且,每一条查询语句的resultMap都得有相对应的唯一的id,比如:

<resultMap id="getAssociationEmpAndDept" type="Emp">

 这样会导致查找不到相应的resultMap :

Result Maps collection does not contain value for com.atguigu.mybatis.mapper.EmpMapper.getAssociationEmpAndDept

出现这样的报错一定要去仔细查找自己resultMap 设置得对应的id。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值