mybatis plug 只查id_Mybatis一对多/多对多查询时只查出了一条数据

问题描述:

如果三表(包括了关系表)级联查询,主表和明细表的主键都是id的话,明细表的多条数据只能查询出来第一条/最后一条数据。

三个表,权限表(Permission),权限组表(PermissionGroup),权限组与权限的关系表(PermissionPermissionGroupKey)

实体类就不写上来了。

原出错映射文件:

SELECT *

FROM [QPWebDB].[dbo].[permission_group] pg

left join [QPWebDB].[dbo].[permission_permission_group] ppg on pg.id=ppg.permission_group_id

left join [QPWebDB].[dbo].[permission] p on p.permission_id=ppg.permission_id

这是因为主表和明细表的id字段名相同造成的。

问题的关键在于resultMap中如果不定义类似主键之类的能够区分每一条结果集的字段的话,会引起后面一条数据覆盖前面一条数据的现象。

解决方法一:

修改主表或者明细表的id名,保证不一致就行

解决方法二:

查询结果起别名

修改映射文件如下:

SELECT pg.*,

p.id p_id,

p.url,

p.name,

p.explain,

p.decipher,

p.create_time

FROM [QPWebDB].[dbo].[permission_group] pg

left join [QPWebDB].[dbo].[permission_permission_group] ppg on pg.id=ppg.permission_group_id

left join [QPWebDB].[dbo].[permission] p on p.id=ppg.permission_id

如上两种方法均能解决这个问题,希望对你有帮助

有知道出现这个问题的原理的大佬欢迎在评论区解释下,O(∩_∩)O谢谢

本文章由[谙忆]编写, 所有权利保留。

欢迎转载,分享是进步的源泉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值