resultMap 和 resultType 的字段映射覆盖题目

金歌  金牌会员 | 2024-5-14 06:31:12 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 928|帖子 928|积分 2784

在MyBatis中,如果你利用resultType而不是resultMap,而且效果集中有同名字段,则默认情况下后出现的字段值会覆盖前面的字段值。这是因为MyBatis在将效果集映射到Java对象时,是按照字段名称一一对应举行赋值的。
但若你盼望更准确地控制映射关系,而且避免自动覆盖行为,则可以用resultMap来显式指定每个字段应该映射到哪个属性上,它在遇到同名字段时不会举行覆盖,尤其是当涉及到多表查询时。
比方,如果有两个表中的字段名雷同,你可以分别为它们起差异的别名:
  1. <select id="selectExample" resultMap="combinedResult">
  2.     SELECT
  3.         t1.id as t1_id,
  4.         t2.id as t2_id,
  5.         ...
  6.     FROM table1 t1
  7.     LEFT JOIN table2 t2 ON t1.id = t2.t1_id
  8. </select>
  9. <resultMap id="combinedResult" type="YourJavaType">
  10.     <id property="idFromTable1" column="t1_id"/>
  11.    
  12.     <id property="idFromTable2" column="t2_id"/>
  13.    
  14. </resultMap>
复制代码
这样通过column属性指定了数据库中的字段别名与Java实体类中属性的对应关系,即使字段名雷同,也能确保精确映射到差异属性上而不会被覆盖。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金歌

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表