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中数据过滤的原因,路子走偏了。
数据过滤时按照主键组装重复元素
本文探讨了在使用LEFT JOIN ON进行一对多查询时,如何避免分页操作导致返回数据不完整的问题。通过排序整合和后端数据清洗,提供了两种解决方案,并揭示了对MyBatis数据过滤理解的误区。
2万+

被折叠的 条评论
为什么被折叠?



