上次给大家讲解了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);
}
然后就大功告成了,前台完全不用变,跟前几次的是一样的,这里就不在重复写了,下面给小伙伴们看下最终效果。
如有不周之处,欢迎小伙伴们提出来,给我留言,我们一起进步,谢谢大家。