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

这就好比两个同名的人住在一起,系统只记住了最后一个进门的人。核心原因是Mybatis在resultMap中默认用id字段来判断对象的唯一性,一旦id相同,框架就认为数据重复了。
方案很简单:给关联表的id字段起别名,或者使用不同的字段名。比如主表用id,子表用sub_id,确保映射时唯一识别即可。也可以在resultMap中调整column属性,显式指定不同的列名,让框架能区分每条记录。
这个细节看起来不起眼,但一旦踩坑确实容易卡很久。字段命名时预留一些关联表的区分度,能省下不少排查时间。实际项目中,建议对每个表的id字段都保持唯一命名,或者在mybatis的映射配置中显式处理,避免这种隐式覆盖问题。
下一篇:mybatis执行任意SQL问题
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8