java吧 关注:1,251,009贴子:12,735,181

大佬求助!!

只看楼主收藏回复

一对多的分页查询,我使用resultmap映射实现的,比如我有一个学生表和班级表,一个学生有多个班级,现在查询所有的学生并且带出下面的班级,这时我limit0,2但不过只显示一个学生的数据,这种情况怎么解决


IP属地:湖北1楼2023-10-27 17:21回复
    还有一种情况是会出现两条一模一样的数据


    IP属地:湖北2楼2023-10-27 17:27
    回复
      一个学生对应多个班级,这个学生是校长吧


      IP属地:山东3楼2023-10-27 17:36
      收起回复
        这不就一个简单的关联查询吗 你sql怎么写的 贴出来看看


        IP属地:江苏来自Android客户端4楼2023-10-27 18:35
        收起回复


          IP属地:湖北5楼2023-10-27 19:32
          收起回复
            那是因为一对多的原因,你把这个sql拿去mysql直接执行你就知道原因了


            IP属地:浙江来自Android客户端6楼2023-10-27 21:14
            回复
              要想解决你要对一表进行分页查询,再把结果拿去查多的那张表,要么就不分页


              IP属地:浙江来自Android客户端7楼2023-10-27 21:15
              回复
                你这槽点多到不知道怎么说,即便你其他都没问题,那你这样写,最多也是出来2条数据,你有没想过一对多的多要怎么从这2条数据里提现出来


                IP属地:广东来自Android客户端8楼2023-10-27 22:24
                收起回复
                  分页主体其实是学生,所以先对学生分页,查出这页展示哪些学生id,再拿这些id去in一次班级。
                  如果数据不多,可以连表,再用select s.id, group_concat(班级) from xxx group by s.id. group_concat有长度上限


                  IP属地:上海9楼2023-10-28 00:46
                  回复
                    limit0,2,sql查出来不就2条数据。映射到vo类,那不就1个vo对象,对象的集合属性里有2个班级信息。


                    IP属地:浙江来自Android客户端11楼2023-10-28 02:07
                    回复
                      没有任何一个分页能支持1对多,要么自己写1对1,要么分组去重,只有这2种方案


                      IP属地:广西来自Android客户端12楼2023-10-28 02:16
                      收起回复
                        limit现在只查两条,因为是left join,可能发生右表数据撑大select,即你所说的一个学生,对应两个班级,就有两条啦,这两条根据resultMap,只封装到一个实体


                        IP属地:广东来自Android客户端13楼2023-10-28 08:38
                        回复
                          可以分两次查询映射,一次只查询分页,还有一次根据上次查询的id单独查询旗下的那什么集合,然后用resultmap的集合标签。


                          IP属地:江苏14楼2023-10-28 08:40
                          回复
                            你的表哪个是1哪个是多?


                            IP属地:广东来自Android客户端15楼2023-10-28 08:44
                            回复
                              分开查不更简单一点吗


                              IP属地:广东来自Android客户端16楼2023-10-28 09:19
                              回复