解决Mybatis一对多/多对多查询时只查出了一条数据问题
Mybatis一对多查询只查出一条数据,这个坑估计不少人踩过。今天就来聊聊这个问题到底出在哪。 问题描述 一对多查询时,多的一方只返回了一条记录,而不是预期的多条数据。排查了半天,发现是表结构设计上埋了个雷。 出错原因 问题就出在两张表的主键id字段名称完全相同。当Mybatis进行结果映射时,会使
Mybatis一对多查询只查出一条数据,这个坑估计不少人踩过。今天就来聊聊这个问题到底出在哪。
问题描述
一对多查询时,多的一方只返回了一条记录,而不是预期的多条数据。排查了半天,发现是表结构设计上埋了个雷。
出错原因
问题就出在两张表的主键id字段名称完全相同。当Mybatis进行结果映射时,会使用id字段作为主键标识,如果多表关联查询时返回的id值重复,后一条数据就会直接覆盖前一条,最终只留下一行。

这就好比两个同名的人住在一起,系统只记住了最后一个进门的人。核心原因是Mybatis在resultMap中默认用id字段来判断对象的唯一性,一旦id相同,框架就认为数据重复了。
问题解决
方案很简单:给关联表的id字段起别名,或者使用不同的字段名。比如主表用id,子表用sub_id,确保映射时唯一识别即可。也可以在resultMap中调整column属性,显式指定不同的列名,让框架能区分每条记录。
总结
这个细节看起来不起眼,但一旦踩坑确实容易卡很久。字段命名时预留一些关联表的区分度,能省下不少排查时间。实际项目中,建议对每个表的id字段都保持唯一命名,或者在mybatis的映射配置中显式处理,避免这种隐式覆盖问题。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。















