Mybatis多表连接查询,一对多模式中数据过滤问题

本文探讨了在使用LEFT JOIN ON进行一对多查询时,如何避免分页操作导致返回数据不完整的问题。通过排序整合和后端数据清洗,提供了两种解决方案,并揭示了对MyBatis数据过滤理解的误区。

1.在一对多的基础参数配置正确的情况下,发现返回数据并没有受到过滤

        使用LEFT JOIN ON连接查询

        例:left 表 id为一 ,它在right表中有两条关联数据,理想状态返回left实体(存在两条right数据的集合)。

        但是我接口返回的数据为:两条left数据分别对应一条right数据。

2.错误点

        因为在前端请求时选择了分页数据

        在分页处理时受  limit  影响导致返回数据时 left表与right表的连接的数据不能正确返回。

        例1:left表id为一,他在right表中有30条关联数据,在连接查询中会有30条数据,如果这时

limit  20 就只会返回 left 实体和20条关联数据。

        例2:如若做连接查询,left有两条关联数据在right表中,使用 left join on查询出的数据中

第一条关联数据在索引10,另外一条关联数据在索引200,那么 在 limit 0,100 的时候,返回的数

据中就只有索引10的关联数据。这样就会造成返回的数据不正确。

3.解决办法

        1.按照关键字段排序,将right表中的数据整合在一起(也会有bug,自己选择合适的场景)

        2.拿到数据后在程序中完成数据清洗

4.总结

        起初一直以为是mybatis中数据过滤的原因,路子走偏了。

        数据过滤时按照主键组装重复元素

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值