欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

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

发布时间:2023/12/10 52 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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谢谢

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

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

总结

以上是生活随笔为你收集整理的mybatis plug 只查id_Mybatis一对多/多对多查询时只查出了一条数据的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。