java一对多整合

上次给大家讲解了bootgrid列表是如何做出来的,这次接着整列表,不过是一对多的显示,这个还是有一定难度的,个人理解,哈哈,好,下面讲思路。

  • sql部分

    我做的这部分呢,是需要根据电路id,把”关联营业厅数量”这列显示到一行,用逗号分隔,典型的一对多问题。
    首先是我把sql分成了两部分写,一部分查询总表,另一部分查询营业厅表

select a.*,b.base_name from t_m3s_circuit a,t_m3s_base b where a.base_id=b.base_id
select a.*,b.office_name from t_m3s_circuit_office a,t_m3s_office b "
                + " where a.circuit_id=? and a.office_id=b.office_id

注释:这两句sql就是个联合查询,前面有讲解联合查询的文章,所以这里不再做解释。

  • 控制层部分

    控制层的思路就是首先要取到电路id这个值,然后根据电路id查询相对应的营业厅数量,然后在用逗号进行分割,显示到前台。

            List<Map> officeCircuitList=new ArrayList<Map>();       
            List<Circuit> listCircuit=this.pageBean.getList();      //获得t_m3s_circuit中的数据
            for(int i=0;i<listCircuit.size();i++){
                Map map=(Map)listCircuit.get(i);        
                //拿到t_m3s_circuit中的circuit_id                                                                       List<Circuit> list=this.circuitService.circuitOfficeList(map.get("circuit_id").toString());     
                String officeId="";
                String officeName="";
                for(int j=0;j<list.size();j++){
                    officeId+=list.get(j).getOffice_id()+",";       //将office_id用逗号分隔
                    officeName+=list.get(j).getOffice_name()+",";
                }
                if(StringUtils.isNotEmpty(officeName)){ 
                    map.put("office_id",officeId.substring(0,officeId.length()-1));     //去除最后一位字符,也就是最后一个逗号
                    map.put("office_name",officeName.substring(0,officeName.length()-1));
                }
                officeCircuitList.add(map);
            }

然后就大功告成了,前台完全不用变,跟前几次的是一样的,这里就不在重复写了,下面给小伙伴们看下最终效果。
这里写图片描述

如有不周之处,欢迎小伙伴们提出来,给我留言,我们一起进步,谢谢大家。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值